C# 在.Net中使用ECDsa和SHA256对XML进行签名
我正在尝试将.Net中的SignedXml与ECDsa(ECDsaCng)和SHA256一起使用,我得到一个“CryptographicException”,消息是“未能创建签名密钥”。是否有人知道如何实现该目标,或者我是否应该知道有关.net对ecdsa支持的相关信息?先谢谢你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
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我也有同样的问题((