2009-02-16 22 views

回答

13

您應該使用DCPcrypt v2並讀取緩衝的文件,並將SHA掃描器與緩衝區一起送入,直到讀完完整的5GB文件。

如果您想知道如何讀取緩衝的大文件,請參閱我的回答about a file copy using custom buffering

所以在概念(沒有真正的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; 
+0

我沒有包含真正的Delphi代碼,因爲我目前沒有安裝Delphi編譯器。 – 2009-02-16 13:57:48

0

有一個OpenSSL的Delphi界面,不是嗎?

這應該爲您提供更好的表現。

5

我會建議沃爾夫岡·埃爾哈特的CRC /散列。
http://home.netsurf.de/wolfgang.ehrhardt/

它的快速和「可與大多數當前帕斯卡被編譯(TP 5/5.5/6,BP 7,VP 2.1,FPC 1.0/2.0/2.2)和Delphi版本(與V1試驗到V7/9/10)」。

我也用過D11/D12。

+0

是的,這也是一個不錯的,非常好的asm優化:) – 2009-02-16 15:51:43

0

如果我沒有記錯,Indy帶有幾個基於流的哈希方法。