我需要独立地计算多个数据块的散列。如下所示:
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对象并为每个新数据块创建一个新对象?
发布于 2011-10-20 15:26:39
使用ComputeHash通常是无状态的,尽管它取决于实际的实现……您可以在运行时通过在调用ComputeHash之后访问State来检查...
看见
发布于 2011-10-20 16:00:39
实际上,当你在.NET框架下需要哈希的时候,我强烈建议你手动编写这个函数,而不是使用.NET框架。
几个月前,我把一个32位的.NET程序移植到了64位的windows上。程序崩溃了。至少我发现,尽管相同的.NET程序,在不同的32/64位系统下,哈希值是不同的。我使用Djb算法代替了.NET散列算法,程序运行良好。
这篇文档是关于Djb散列算法的,你可以用C#重写。这不是一项艰苦的工作。
https://stackoverflow.com/questions/7832440
复制相似问题