问题已经被表述得很清楚了。这段代码...
第二种方法实际上更快,但我听说这是不好的做法。
我的问题是,使用ComputeHash(stream)的正确方式是什么。 对于我来说,它总是返回相同的哈希值(即使我重新启动程序,这意味着它不仅仅是哈希引用),而与流中的数据无关。
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)的正确方式是什么。 对于我来说,它总是返回相同的哈希值(即使我重新启动程序,这意味着它不仅仅是哈希引用),而与流中的数据无关。
Stream
实例已经定位在流的末尾。ComputeHash
返回从当前位置到流末尾的字节的哈希值。所以如果当前位置就是流的末尾,它将返回空输入的哈希值。确保Stream
实例定位在流的开头。请注意,访问StreamReader
的BaseStream
是不好的做法。 - dtb