2

我有一个FileStream连接到我想直接读入 SHA512 对象的 xml 文件,以便为校验和(不是安全用途)计算哈希值。

这个问题是双重的:

  1. 我想省略xml中的一些节点,
  2. 该文件非常大,我宁愿不将整个内容加载到内存中

我可以将整个文件读入 xml 结构,删除节点,然后将其写入一个流,然后将其插入SHA512.ComputeHash,但这会导致性能损失。我希望能够以某种方式删除节点作为对流的操作,然后以某种方式将流链接在一起,形成一个可以传递到SHA512.ComputeHash(Stream).

我怎样才能做到这一点?

4

1 回答 1

0
using (var hash = new SHA512Cng())
using (var stream = new CryptoStream(Stream.Null, hash, CryptoStreamMode.Write))
using (var writer = XmlWriter.Create(stream))
using (var reader = XmlReader.Create("input.xml"))
{
    while (reader.Read())
    {
        // ... write node to writer ...
    }

    writer.Flush();
    stream.FlushFinalBlock();
    var result = hash.Hash;
}
于 2013-03-26T19:15:45.583 回答