我需要计算相当大的文件(千兆字节)的校验和。这可以通过以下方法来完成:可能用缓冲读取计算MD5(或其他)散列?
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(或其他)哈希,即:计算一个缓冲区的哈希值,然后将得到的哈希值送入下一次迭代。
事情是这样的:(伪-ISH)
byte [] hash = new byte [] { 0,0,0,0,0,0,0,0 };
while(!eof)
{
buffer = readFromSourceFile();
writefile(buffer);
hash = calchash(buffer, hash);
}
散列现在sililar什么会运行整个文件的calcHash功能来实现。
现在,我无法在.Net 3.5框架中找到任何重写,我在做梦吗?它从来没有存在过,还是我只是在搜索?同时执行写入和校验和计算的原因是由于大文件造成的。
omg,只是发布了相同的建议,使用相同的格式=) – 2010-01-23 20:03:19
好吧,但+1也提供了一个参考! – 2010-01-23 20:05:19
Ay caramba!它是!这是我正在寻找的功能。很高兴知道我没有完全掌握。感谢Guffa和Rubens及时提供正确答案。 +1给你们两个,我会接受这个答案,因为包含的代码示例。 – 2010-01-23 20:31:34