C# MD5 computeHash(流)和computeHash(字节[])之间的区别是什么

C# MD5 computeHash(流)和computeHash(字节[])之间的区别是什么,c#,.net,hash,md5,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) ;

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

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 md5Bytes=MD5.Create();
MD5 md5Stream=MD5.Create();
var random=新的random();
var字节=新字节[4096*2];
随机。下一个字节(字节);
var stream=新内存流(字节);
流位置=0;
var bytesHash=md5Bytes.ComputeHash(字节);
var streamHash=md5Stream.ComputeHash(stream);
for(int i=0;i

当我运行这个时,出乎意料的是,我得到了不同的结果。有人能解释一下这里发生了什么吗?字节数组的MD5不应该给出与相同内容流相同的结果吗?

您正在将数据与散列进行比较,因此它当然不相同;比较应为:

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

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

试图关闭这个话题,因为它只是一个打字错误。我强烈建议您始终在循环中使用大括号,即使主体只是一条语句。这是调试如何解决问题的一个很好的示例。如果您在VS中有一个断点,而不是编写代码,那么查看正确的变量会更容易。