C# 在.Net中使用ECDsa和SHA256对XML进行签名

C# 在.Net中使用ECDsa和SHA256对XML进行签名,c#,cryptography,ecdsa,cng,signedxml,C#,Cryptography,Ecdsa,Cng,Signedxml,我正在尝试将.Net中的SignedXml与ECDsa(ECDsaCng)和SHA256一起使用,我得到一个“CryptographicException”,消息是“未能创建签名密钥”。是否有人知道如何实现该目标,或者我是否应该知道有关.net对ecdsa支持的相关信息?先谢谢你 public XmlDocument SignXml(XmlDocument xmlDoc) { CngKey cngKey = CngKey.Create(CngAlgorithm.ECDsa

我正在尝试将.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]

在方法中

公共无效计算签名()


仅接受RSA和DSA密钥。遗憾的是,它没有在地图上的某个地方指定。您必须传递SignedXml类。

删除了我的答案,因为它没有解决问题。我认为这个错误更为明显:不支持比创建签名密钥失败要好(特别是因为微软倾向于不区分算法和密钥)。Microsoft平台上的EC支持非常有限。您对“Microsoft平台上的EC支持非常有限”的确切含义是什么?对域参数、算法和内部协议的支持很少。NIST证书中的曲线支持ECDSA,但我对dig-sig不太确定。而且,仅供参考,我在哪里可以找到更多信息?对我来说还不够清楚。否则,非常感谢你的帮助。我真希望我知道。我花了很长时间浏览MS文档。它通常是正确的,但并不总是完整的。非常感谢,我终于成功地使用了BouncyCastle,一直在等待在.NET Framework平台上实现ECDSA。您能分享一下实现@Alejandro Morá吗n@AlejandroMor你是怎么做到的?你能和我们分享吗?@Freeedy很抱歉,我没有那个代码了,但我最终通过使用BouncyCastle库解决了这个问题。@AlejandroMorán我也有同样的问题((