2009-02-16 43 views

Respuesta

13

Debe usar DCPcrypt v2 y leer su archivo en búfer y alimentar el hasher SHA con el búfer hasta que haya leído el archivo completo de 5GB.

Si quiere saber cómo leer un archivo grande en búfer, vea mi respuesta about a file copy using custom buffering.

por lo que en el concepto (sin código de Delphi de verdad!):

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; 
+0

No incluí el código real de Delphi porque no tengo un compilador Delphi instalado en este momento. –

0

Hay una interfaz Delphi para OpenSSL, ¿verdad?

Eso debería proporcionarle mejores actuaciones.

5

recomendaría de Wolfgang Ehrhardt CRC/Hash.
http://home.netsurf.de/wolfgang.ehrhardt/

Es rápido y "pueden ser compilados con más actual Pascal (TP 5/5,5/6, BP 7, VP 2.1, FPC 1,0/2,0/2,2) y las versiones de Delphi (probado con V1 hasta V7/9/10) ".

Lo he usado con D11/D12 también.

+0

sí, también es una buena, muy buenas optimizaciones de asm :) –

0

Si mal no recuerdo, Indy viene con varios métodos de hash basados ​​en la transmisión.

Cuestiones relacionadas