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

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

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

Ответ 1

Вы должны использовать DCPcrypt v2 и прочитать свой файл с буферизацией и передать шейдер SHA с помощью буфера, пока не прочитаете полный файл размером 5 ГБ.

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

так что в концепции (нет реального кода 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;

Ответ 2

Я бы порекомендовал Wolfgang Ehrhardt 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.

Ответ 3

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

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

Ответ 4

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