HashAlgorithm.ComputeHash()有状态吗?

时间:2011-10-20 07:21:14

标签: c# .net hash

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

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对象并为每个新数据块创建一个新对象?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:-2)

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

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

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