HashAlgorithm.ComputeHash()是有状态的吗?

7
我需要独立计算多个数据块的哈希值。类似这样:
using( HashAlgorithm hasher = new ActualHashAlgorithm() ) {
    for( int i = 0; i = numberOfBlocks; i++ ) {
        byte[] block = getBlock( i );
        byte[] hash = hasher.ComputeHash( block );
        // use hash
    }
}

我能否在不同的数据块之间重复使用相同的HashAlgorithm对象?调用ComputeHash()后,HashAlgorithm是否会重置状态,或者我需要处理HashAlgorithm对象并为每个新数据块创建一个新的对象?

2个回答


-2

实际上,在.NET框架下需要哈希时,我强烈建议手动编写此函数而不是使用.NET框架。

几个月前,我将一个32位的.NET程序移植到64位的Windows系统中。程序崩溃了。至少我发现在不同的32/64位系统下哈希值是不同的,尽管是相同的.NET程序。 我使用了Djb算法而不是.NET哈希算法,程序运行良好。

本文介绍了Djb哈希算法,您可以用C#重写它。这并不是一项困难的工作。


2
我同意你的观点,不应该使用 object.GetHashCode() 来创建持久哈希。然而,利用 System.Security.Cryptography 命名空间中的众所周知的哈希算法,如 SHA256,不会导致你所警告的问题。 - Brian R. Mullin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接