Delphi: как вычислить хэш SHA большого файла

Привет, мне нужно создать SHA над файлом 5 Gig

знаете ли вы о не Строковой библиотеке Delphi, которая может это сделать ?

4 ответов


вы должны использовать DCPcrypt V2 в и прочитайте буферизованный файл и подайте SHA hasher с буфером, пока вы не прочитаете полный файл 5GB.

Если вы хотите знать, как читать большой файл в буфер, см. Мой ответ о копии файла с помощью пользовательской буферизации.

Итак, в концепции (нет реального кода delphi!):

function GetShaHash(const AFilename: String)
begin
  sha := TSHAHasher.Create;
  SetLength(Result, sha.Size);
  file := OpenFile(AFilename, GENERIC_READ);
  while not eof file do
  begin
     BytesRead := ReadFile(file, buffer[0], 0, 1024 * 1024);
     sha.Update(buffer[0], BytesRead);
  end;
  sha.Final(Result[0]); 
  CloseFile(file);
end;

Я бы рекомендовал CRC/Hash Вольфганга Эрхардта.
http://home.netsurf.de/wolfgang.ehrhardt/

это быстро и "может быть скомпилирован с большинством текущих Pascal (TP 5/5.5/6, BP 7, VP 2.1, FPC 1.0/2.0/2.2) и версии Delphi (протестированы с V1 до V7 / 9 / 10)".

Я тоже использовал его с D11/D12.


Если я правильно помню, Indy поставляется с несколькими потоковыми хэш-методами.


существует интерфейс Delphi для OpenSSL, не так ли?

Это должно обеспечить вам лучшие характеристики.