应用程序接收字节块。在每个块之后,应用程序需要计算到目前为止接收到的所有数据的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实现,即使我已经获得了哈希,也可以让我继续提供数据?