我尝试在 .Net 中将 SignedXml 与 ECDsa (ECDsaCng) 和 SHA256 结合使用,但收到“CryptographicException”,其中包含消息“无法创建签名 key 。”。有人知道如何实现该目标,或者我是否应该了解有关 .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, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]
在方法中
public void ComputeSignature()
仅接受 RSA 和 DSA key 。遗憾的是,MSDN 上没有指定它。 。您必须传递 SignedXml 类。
关于c# - 在 .Net 中使用 ECDsa 和 SHA256 签署 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420789/