我有以下代码,它正在读取Stream以将其内容存储为字符串。不幸的是,在不再使用StreamReader之后,Stream的哈希值已经改变。这怎么可能? Stream是只读的,因此无法更改。
string content;
string hash = Cryptography.CalculateSHA1Hash(stream); // 5B006E35CF1838871FDC1E3DF52B0CB5A8A97274
using (StreamReader reader = new StreamReader(stream))
{
content = reader.ReadToEnd();
}
hash = Cryptography.CalculateSHA1Hash(stream); // DA39A3EE5E6B4B0D3255BFEF95601890AFD80709
答案 0 :(得分:3)
SHA1值DA39A3EE5E6B4B0D3255BFEF95601890AFD80709
是散列空字符串的结果。对Cryptography.CalculateSHA1Hash
的调用从字符串中读取所有内容(从当前位置到结尾)并对其进行哈希处理。第一次调用Cryptography.CalculateSHA1Hash
后,没有更多数据可供阅读。
我还猜测你的StreamReader.ReadToEnd()
会因同样的原因返回一个空字符串。
答案 1 :(得分:2)
2个值是否始终相同?您的方法可能是从流的内容创建哈希,在第二个实例中,流位于结束位置,因此无法读取更多数据。
如果你回到开头寻找流,你会得到一致的数字吗?
答案 2 :(得分:2)
流Position
可能已更改(例如ReadToEnd
),摘要是根据当前Position
计算的?
这只是一个猜测,因为我们无法帮助你很多而没有看到Cryptography.CalculateSHA1Hash
的代码。
答案 3 :(得分:1)
您已将StreamReader
放入using
区块 - 这是一件好事。但是,TextReader.Dispose
默认情况下会在基础流上调用Dispose
。这可能会改变一切。
尝试检查using
块内的哈希值。