c# BaseStream返回相同的MD5哈希值,而不管流中有什么

本文关键字:不管 什么 哈希值 返回 BaseStream MD5 | 更新日期: 2023-09-27 18:19:11

这个问题说明了一切。代码

string hash = "";
using (var md5 = System.Security.Cryptography.MD5.Create())  
{  
    hash = Convert.ToBase64String(md5.ComputeHash(streamReader.BaseStream));  
}  

将始终返回相同的哈希值。

如果我将所有的数据从BaseStream传递到MemoryStream,它每次都会给出一个唯一的哈希值。运行

也是如此
string hash = "";  
using (var md5 = System.Security.Cryptography.MD5.Create())  
{  
    hash = Convert.ToBase64String(md5.ComputeHash(
              Encoding.ASCII.GetBytes(streamReader.ReadToEnd())));  
}  

第二种方法实际上更快,但我听说这是不好的做法。

我的问题是,什么是正确的方式来使用ComputeHash(流)。对我来说,无论流中的数据是什么,它总是(我的意思是总是,即使我重新启动程序,这意味着它不仅仅是对引用进行散列)返回相同的散列。

c# BaseStream返回相同的MD5哈希值,而不管流中有什么

Stream实例可能位于流的末尾。ComputeHash返回从当前位置到流结束的字节的哈希值。因此,如果当前位置是流的末尾,它将为空输入执行哈希。确保Stream实例位于流的开头

我通过设置流解决了这个问题。Position = 0 before