MD5 computeHash(Stream)和computeHash(byte[])的区别是什么?

本文关键字:computeHash 区别 是什么 byte Stream MD5 | 更新日期: 2023-09-27 17:52:42

这是我见过的少数人的问题,但大多数都是关于文本编码问题。这是一个纯粹的二元问题。下面是一些示例代码:

MD5 md5Bytes  = MD5.Create() ;
MD5 md5Stream = MD5.Create() ;
var random    = new Random();
var bytes     = new byte[ 4096*2 ] ;
random.NextBytes(bytes);    
var stream = new MemoryStream(bytes) ;
stream.Position = 0 ;
var bytesHash   = md5Bytes.ComputeHash(bytes);
var streamHash  = md5Stream.ComputeHash(stream);
for (int i = 0; i < bytesHash.Length; ++i)
  if ( bytes[i] != streamHash[i] )
  {
    Console.WriteLine("Different content " + i);
    break;
  }

当我运行这个时,令我惊讶的是我得到了不同的结果。谁能解释一下这是怎么回事字节数组的MD5不应该和内容相同的流给出相同的结果吗?

MD5 computeHash(Stream)和computeHash(byte[])的区别是什么?

将数据与散列进行比较,因此当然不一样;比较应该是:

if (bytesHash[i] != streamHash[i])

现在它给出了与预期相同的结果;)