【发布时间】: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 中设置断点而不是编写代码来执行此操作,那么查看正确的变量会更容易。