【问题标题】:Calculate hash without having the entire buffer in memory at once计算哈希值,而无需一次将整个缓冲区都放在内存中
【发布时间】:2010-11-22 22:39:09
【问题描述】:

我正在执行一个操作,我从一个组件接收一些字节,进行一些处理,然后将其发送到下一个组件。我需要能够计算我在任何给定时间看到的所有数据的哈希值——并且由于数据大小;我无法将其全部保存在本地缓冲区中。

在这些情况下,您将如何计算 (MD5) 哈希?

我认为我应该能够保留散列的中间结果,并在进行时添加更多数据。但是是否有任何内置框架类支持这一点?

【问题讨论】:

    标签: c# .net hash md5


    【解决方案1】:

    您只想使用该类的TransformBlockTransformFinalBlock 成员,它们允许您以块的形式计算散列。

    MSDN 有一个很好的例子来说明如何做到这一点。

    【讨论】:

    • TransformBlock / TransformFinalBlock 有效;但是,如果您可以传递给 TransformFinalBlock 函数的块大小与哈希值不同或更大,则需要在调用 TransformFinalBlock 后使用 HashAlgorithm.Hash 属性获取哈希值。
    【解决方案2】:

    它没有装在盒子里有点令人惊讶。

    如果在成员变量中创建MD5CryptoServiceProvider,反复调用ComputeHash(),是不是不能作为append呢?

    【讨论】:

    • 不,ComputeHash 反复,不起作用。 TransformBlock / TransformFinalBlock 方法似乎有效,我目前正在对其进行测试。
    猜你喜欢
    • 2016-02-29
    • 2014-01-14
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多