【问题标题】:Is HashAlgorithm.ComputeHash() stateful?HashAlgorithm.ComputeHash() 是有状态的吗?
【发布时间】:2011-10-20 16:00:38
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net hash


    【解决方案1】:
    【解决方案2】:

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

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

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

    【讨论】:

    • 我同意你的观点,不应该使用object.GetHashCode() 来创建持久哈希。但是,使用 System.Security.Cryptography 命名空间中记录良好的哈希算法(例如 SHA256)不会导致您警告的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2021-08-19
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多