读取流正在改变它的哈希值

时间:2011-12-20 19:31:16

标签: c# hash stream

我有以下代码,它正在读取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

4 个答案:

答案 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块内的哈希值。