2013-10-08 112 views
0

我们正在尝试对一个xml文件进行哈希处理,我已经使它散列了XML的内容。 对此我用下面的代码:C#哈希完整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而不是仅仅内容。

如果我们只散列内容,我们的散列不会与我们得到的控件进行比较。

+0

你的意思一样,打开文件,并没有将其读入的XmlDocument的实例哈希的内容? – Matten

回答

0

你可以阅读,而无需创建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); 
} 
+0

谢谢!这确实解决了这个问题! – Vincentw