小编Mah*_*oud的帖子

.Net:SignedXml - 用变换算法exc-c14n签名xml

我正在尝试使用SignedXml类在C#中签名Xml(实际上是SOAP xml),签名阶段成功通过,但是当我尝试验证签名时它告诉我它无效.我在MSDN中使用XmlDsigExcC14NTransform而不是转换XmlDsigEnvelopedSignatureTransform 的示例中所做的唯一更改.如果我使用XmlDsigEnvelopedSignatureTransform,我将获得有效的签名.

这是我的签名代码:

 private static XmlDocument SignXml(XmlDocument doc)
             {
                 SignedXml signedXml = new SignedXml(doc);
                 signedXml.SigningKey = Certificate.PrivateKey;

                 Reference reference = new Reference();
                 reference.Uri = "";

                 XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
                 //XmlDsigExcC14NTransform env = new XmlDsigExcC14NTransform();

                 reference.AddTransform(env);

                 signedXml.AddReference(reference);
                 signedXml.ComputeSignature();

                 XmlElement signature = signedXml.GetXml();
                 doc.DocumentElement.AppendChild(signature);
                 doc.Save(SignedXmlPath);
                 return doc;
             }
Run Code Online (Sandbox Code Playgroud)

上面的代码将给我一个有效的签名,但如果我使用

XmlDsigExcC14NTransform env = new XmlDsigExcC14NTransform();
Run Code Online (Sandbox Code Playgroud)

代替

XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
Run Code Online (Sandbox Code Playgroud)

我会得到一个无效的签名.

这是我的验证码:

private static bool Verify(XmlDocument doc)
        {
            SignedXml signedDoc = new SignedXml(doc);
            XmlNodeList nodeList = …
Run Code Online (Sandbox Code Playgroud)

c# signedxml

4
推荐指数
1
解决办法
8303
查看次数

标签 统计

c# ×1

signedxml ×1