MD5 computeHash(Stream)和computeHash(byte [])之间有什么区别

时间:2014-03-24 20:37:55

标签: c# .net hash md5

这对我见过的一些人来说是一个问题,但大多数人都是关于文字问题的。这是纯粹的二元问题。这是一些示例代码。

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给出与相同内容流相同的结果吗?

1 个答案:

答案 0 :(得分:8)

您正在将数据与哈希进行比较,因此当然不一样;比较应该是:

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

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