我需要独立计算多个数据块的哈希值。像这样:
using( HashAlgorithm hasher = new ActualHashAlgorithm() ) {
for( int i = 0; i = numberOfBlocks; i++ ) {
byte[] block = getBlock( i );
byte[] hash = hasher.ComputeHash( block );
// use hash
}
}
我可以在块之间重用相同的HashAlgorithm
对象吗?在HashAlgorithm
的调用之间ComputeHash()
会重置状态还是我需要处理HashAlgorithm
对象并为每个新数据块创建一个新对象?
答案 0 :(得分:2)
使用ComputeHash
通常是无状态的,但它取决于实际的实现...您可以在调用State
后访问ComputeHash
在运行时检查...
见
答案 1 :(得分:-2)
实际上,当你需要在.NET框架下使用hash时,我强烈建议手动编写这个函数但不要使用.NET框架。
几个月后,我将32位.NET程序移植到64位窗口。该程序崩溃了。至少我发现在不同的32 / 64bit系统下哈希值是不同的,尽管相同的.NET程序。 我使用Djb算法代替.NET哈希算法,程序运行正常。
本文档是关于Djb哈希算法的,可以通过C#重写。这不是一项艰苦的工作。