HashAlgorithm.ComputeHash()有状态吗?

我需要独立计算多个数据块的哈希值。 像这样的东西:

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重置状态,还是需要处理HashAlgorithm对象并为每个新数据块创建一个新对象?

实际上,当你需要在.NET框架下使用哈希时,我强烈建议手动编写这个函数但不要使用.NET框架。

几个月后,我将32位.NET程序移植到64位窗口。 该程序崩溃了。 至少我发现在不同的32 / 64bit系统下哈希值是不同的,尽管相同的.NET程序。 我使用Djb算法代替.NET哈希算法,程序运行正常。

本文档是关于Djb哈希算法的,可以通过C#重写。 这不是一项艰苦的工作。

  • DJB Hashfunction