如何计算连续的MD5哈希值?

时间:2019-06-21 10:44:22

标签: c# md5

应用程序接收字节块。在每个块之后,应用程序需要计算到目前为止接收到的所有数据的MD5。

似乎在这种情况下无法使用内置的MD5类,因为调用TransformFinalBlock()是最终的。到目前为止,我需要获取MD5哈希值,但仍要继续使用MD5实例为它提供下一个块。

MD5 md5 = MD5.Create();
while(true)
    {
    byte[] chunk = GetNextChunk();
    if (chunk == null)
        break;
    md5.TransformBlock(chunk, 0, chunk.Length, null, 0);  // fails here on second loop
    md5.TransformFinalBlock(chunk, 0, 0);
    Console.WriteLine("hash = {0}", md5.Hash);
    }

我必须先调用TransformFinalBlock,然后才能访问Hash属性。但是一旦完成,就无法再次调用TransformBlock。

上面的代码可以很好地打印出第一个块的哈希值。 它需要打印的第二个哈希是连接在一起的第一个和第二个块的哈希。 对于所有三个组块,第三个哈希将被串联。 等等...

有没有C#的MD5实现,即使我已经获得了哈希,也可以让我继续提供数据?

0 个答案:

没有答案