2011-05-06 196 views
1

嗨我無法驗證從服務器收到的響應的簽名。我正在使用以下方法來驗證它。簽名驗證失敗

using (MemoryStream ms = new MemoryStream(System.IO.File.ReadAllBytes("D:\\Response.xml"))) 
    { 
    XmlDocument responseDocument = new XmlDocument(); 
    responseDocument.PreserveWhitespace = true; 
    responseDocument.Load(ms); 

    SignedXml sxml = new SignedXml(responseDocument); 
    XmlNodeList newNodeList = newDoc.GetElementsByTagName("Signature"); 
    sxml.LoadXml((XmlElement)newNodeList[0]); 

    sxml.CheckSignature();   

    } 

任何人都可以提出什麼可能的問題?以及如何解決它? 代碼位於c#.net

+0

這個問題涉及到通過接受的答案來判斷簽名的生成:這個問題是離題的。 – 2015-06-18 13:58:53

回答

0

問題是從簽名生成處理。現在已經解決了。 以上方法對於驗證簽名是正確的。

0

您的代碼似乎錯了。經過全體簽名標籤您的代碼迭代(精)並試圖尋找每個簽名標籤中的簽名標籤(奇怪?!)

試試這個代碼,而不是:

using (MemoryStream ms = new MemoryStream(System.IO.File.ReadAllBytes("D:\\Response.xml"))) 
    { 
    XmlDocument responseDocument = new XmlDocument(); 
    responseDocument.PreserveWhitespace = true; 
    responseDocument.Load(ms); 
    SignedXml sx = new SignedXml((XmlElement)responseDocument.GetElementsByTagName("Response")[0]); 
    XmlNodeList nodeList = responseDocument.GetElementsByTagName("Signature"); 
    foreach (XmlElement element in nodeList) 
    { 
     // Load the signature node. 
     sx.LoadXml(element); 
     sx.CheckSignature(); 
    } 
    } 
+0

這是萬一如果有多個簽名。這是標準代碼 – sanket 2011-05-06 09:50:52

+0

@sanket:更新了我的答案。請參閱代碼。 – 2011-05-06 09:53:32

+0

沒有運氣。 sx.CheckSignature()只返回false。 – sanket 2011-05-06 10:02:08