C# 哈希完成 xml
本文关键字:xml 哈希完 | 更新日期: 2023-09-27 18:34:19
我们正在尝试对 xml 文件进行哈希处理,我已经让它对 XML 的内容进行哈希处理。为此,我使用以下代码:
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(txtFile.Text);
XmlNodeList list = doc.GetElementsByTagName("Document");
XmlElement node = (XmlElement)list[0];
//node.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
string s = node.OuterXml;
using (MemoryStream msIn = new MemoryStream(Encoding.UTF8.GetBytes(s)))
{
XmlDsigC14NTransform t = new XmlDsigC14NTransform(true);
t.LoadInput(msIn);
using (var hash = new SHA256Managed())
{
byte[] digest = t.GetDigestedOutput(hash);
txtHash.Text = BitConverter.ToString(digest).Replace("-", String.Empty);
}
}
但是,这只会对 XML 的内容进行哈希处理。我需要的是散列完整的XML,而不仅仅是内容。
如果我们只对内容进行哈希处理,则我们的哈希值无法与我们获得的控件进行比较。
您可以在不创建XmlDocument
的情况下读取文件内容并对内容进行哈希处理:
var file = File.ReadAllBytes(txtFile.Text);
using (var hash = new SHA256Managed())
{
byte[] digest = hash.ComputeHash(file);
txtHash.Text = BitConverter.ToString(digest).Replace("-", String.Empty);
}