2011-05-06 203 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