Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同一XML文档的不同DigestValue_C#_Xml Dsig - Fatal编程技术网

C# 同一XML文档的不同DigestValue

C# 同一XML文档的不同DigestValue,c#,xml-dsig,C#,Xml Dsig,我已经签署了xml文档 该文件的摘要值为atHP855e32qDMu4fzAZr+wXRqfeLh9HTpnAlAFy/jDg= 当我尝试用下面的代码检查它时,结果是Ppk6zE8XY4zaIPco/fY/sSKog3imkmko8CMAIHVNwTw= 我认为问题在于包含空格的Body标签。如果在没有空格的情况下签署此文档,则摘要值相等 谁能发现错误 public static byte[] GetDigest(XmlDocument doc) { var nodeLi

我已经签署了xml文档

该文件的摘要值为atHP855e32qDMu4fzAZr+wXRqfeLh9HTpnAlAFy/jDg= 当我尝试用下面的代码检查它时,结果是Ppk6zE8XY4zaIPco/fY/sSKog3imkmko8CMAIHVNwTw= 我认为问题在于包含空格的Body标签。如果在没有空格的情况下签署此文档,则摘要值相等

谁能发现错误

public static byte[] GetDigest(XmlDocument doc)
    {
        var nodeList = doc.GetElementsByTagName(
          "Signature", "http://www.w3.org/2000/09/xmldsig#");

        var signedXml = new SignedXml(doc);
        signedXml.LoadXml((XmlElement)nodeList[0]);

        var signatureDescription = CryptoConfig.CreateFromName(signedXml.SignedInfo.SignatureMethod) as SignatureDescription;
        var hashAlgorithm = signatureDescription.CreateDigest();

        var xmlDocument = new XmlDocument
        {
            PreserveWhitespace = true
        };

        var body = doc.SelectSingleNode("/ReportEnvelope/Body");

        XmlNodeList transformNode = ((XmlElement)(nodeList[0])).GetElementsByTagName("Transform");

        xmlDocument.AppendChild(xmlDocument.ImportNode(body, true));

        var transform = signedXml.SignedInfo.CanonicalizationMethodObject;
        transform.LoadInnerXml(transformNode);
        transform.LoadInput(xmlDocument);
        return transform.GetDigestedOutput(hashAlgorithm);
    }

我也遇到了这个问题,它与SignedXml如何创建哈希摘要有关。在.NET4中,它完全忽略XML中的任何空白