首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HashAlgorithm.ComputeHash()是有状态的吗?

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

Stack Overflow用户
提问于 2011-10-20 15:21:14
回答 2查看 2.3K关注 0票数 7

我需要独立地计算多个数据块的散列。如下所示:

代码语言:javascript
复制
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对象并为每个新数据块创建一个新对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-20 15:26:39

使用ComputeHash通常是无状态的,尽管它取决于实际的实现……您可以在运行时通过在调用ComputeHash之后访问State来检查...

看见

  • http://msdn.microsoft.com/en-us/library/s02tk69a.aspx
  • http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.transformblock.aspx
  • http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.transformfinalblock.aspx
  • http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.state.aspx
票数 3
EN

Stack Overflow用户

发布于 2011-10-20 16:00:39

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

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

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

  • DJB Hash Function
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7832440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档