2013-10-08 83 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