【问题标题】:What is the difference between MD5 computeHash(Stream) and computeHash(byte[]) [closed]MD5 computeHash(Stream)和computeHash(byte [])有什么区别[关闭]
【发布时间】:2014-05-02 10:34:06
【问题描述】:

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

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

【问题讨论】:

  • 因为它只是一个错字,所以很想关闭它作为题外话。我强烈鼓励您始终将大括号放入 for 循环中,即使主体只是一条语句。
  • 这是调试如何解决问题的一个很好的例子。如果您在 VS 中设置断点而不是编写代码来执行此操作,那么查看正确的变量会更容易。

标签: c# .net hash md5


【解决方案1】:

您将数据与哈希进行比较,所以当然不一样;比较应该是:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2012-10-15
    • 2023-03-03
    • 2011-10-18
    • 2016-05-27
    • 2019-03-02
    • 2023-03-12
    • 2013-03-18
    相关资源
    最近更新 更多