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