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(流)。对我来说,无论流中的数据是什么,它总是(我的意思是总是,即使我重新启动程序,这意味着它不仅仅是对引用进行散列)返回相同的散列。
Stream
实例可能位于流的末尾。ComputeHash
返回从当前位置到流结束的字节的哈希值。因此,如果当前位置是流的末尾,它将为空输入执行哈希。确保Stream
实例位于流的开头
我通过设置流解决了这个问题。Position = 0 before