我需要计算相当大的文件(几个GB)的校验和。可以使用以下方法完成:
private byte[] calcHash(string file)
{
System.Security.Cryptography.HashAlgorithm ha = System.Security.Cryptography.MD5.Create();
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] hash = ha.ComputeHash(fs);
fs.Close();
return hash;
}
然而,通常使用缓冲方式(例如一次写入32MB)来写入文件。我确信曾经看到过哈希函数的重写,使我能够在写入时计算MD5(或其他)哈希值,即在计算一个缓冲区的哈希值后,将该结果哈希值输入下一次迭代。
大致如下伪代码:
byte [] hash = new byte [] { 0,0,0,0,0,0,0,0 };
while(!eof)
{
buffer = readFromSourceFile();
writefile(buffer);
hash = calchash(buffer, hash);
}
哈希现在类似于在整个文件上运行calcHash函数所实现的内容。
现在,在.Net 3.5框架中我找不到任何类似的覆盖方法,我是在做梦吗?它从未存在过,还是我只是搜索得不好?同时进行写入和校验和计算的原因是由于文件太大,这样做很有意义。
block
实例替换为null
;您实际上不希望发生任何复制;输出参数实际上与哈希处理无关。 - Eamon Nerbonne