我正在尝试将.Net中的SignedXml与ECDsa(ECDsaCng)和SHA256结合使用,并且收到消息“无法创建签名密钥”的“ CryptographicException”。有人知道如何实现该目标,还是我应该知道有关.net对ecdsa的支持的相关信息?先感谢您。

public XmlDocument SignXml(XmlDocument xmlDoc)
    {
        CngKey cngKey = CngKey.Create(CngAlgorithm.ECDsaP256);
        ecDsaCng = new ECDsaCng(cngKey);
        ecDsaCng.HashAlgorithm = CngAlgorithm.ECDsaP256;
        ecDsaCng.KeySize = 256;

        xmlDoc.PreserveWhitespace = true;

        SignedXml signedXml = new SignedXml(xmlDoc);
        signedXml.SigningKey = ecDsaCng;

        Reference reference = new Reference();
        reference.Uri = "";
        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
        reference.AddTransform(env);
        signedXml.AddReference(reference);

        signedXml.ComputeSignature();

        XmlElement xmlDigitalSignature = signedXml.GetXml();
        xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
        return xmlDoc;
    }


错误出现在“ signedXml.ComputeSignature();”中方法调用。

最佳答案

看看组装


  [System.Security,版本= 4.0.0.0,区域性=中性,
  PublicKeyToken = b03f5f7f11d50a3a]


在方法中


  公共无效ComputeSignature()


仅接受RSA和DSA密钥。遗憾的是没有在MSDN上的某处指定它。您将必须传递SignedXml类。

关于c# - .NET中使用ECDsa和SHA256对XML进行签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27420789/

10-12 14:23