串联计算校验和:避免内存问题

时间:2013-03-26 18:52:53

标签: c# xml xml-parsing stream checksum

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

问题有两个:

  1. 我想省略xml中的一些节点,
  2. 文件非常大,我宁愿不将整个内容加载到内存中
  3. 我可以将整个文件读入xml结构,删除节点,然后将其写入一个然后插入SHA512.ComputeHash的流,但这会导致性能下降。我希望能够以某种方式删除节点作为流上的操作,然后以某种方式将流链接在一起,形成一个可以传递到SHA512.ComputeHash(Stream)的流。

    我该如何做到这一点?

1 个答案:

答案 0 :(得分: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;
}