2009-02-16 81 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带有几个基于流的哈希方法。