2009-02-16 12 views

Antwort

13

Sie sollten DCPcrypt v2 verwenden und Ihre Datei gepuffert lesen und den SHA-Hasher mit dem Puffer füttern, bis Sie die vollständige 5GB-Datei gelesen haben.

Wenn Sie wissen möchten, wie eine große Datei gepuffert lesen, finden Sie in meiner Antwort about a file copy using custom buffering.

so in Konzept (kein wirklicher delphi-Code!):

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

Ich habe keinen echten Delphi-Code verwendet, da ich im Moment keinen Delphi-Compiler installiert habe. –

0

Es gibt eine Delphi-Schnittstelle für OpenSSL, oder?

Das sollte Ihnen bessere Leistungen bieten.

5

würde ich Wolfgang Ehrhardt CRC/Hash empfehlen.
http://home.netsurf.de/wolfgang.ehrhardt/

Es ist schnell und „kann bis zu V7/mit den meisten aktuellen Pascal (TP 5/5,5/6, BP 7, VP 2.1, FPC 1.0/2.0/2.2) und Delphi-Versionen (getestet mit V1 kompiliert 9/10) ".

Ich habe es auch mit D11/D12 verwendet.

+0

ja, das ist auch eine nette, sehr schöne asm optimalisierungen :) –

0

Wenn ich mich richtig erinnere, kommt Indy mit mehreren Stream-basierten Hash-Methoden.