gpt4 book ai didi

c# - 使用 BouncyCaSTLe 在 C# 中验证使用 ECDSA(使用 SHA256)签名的 XMLSignature 抛出 InvalidCastException

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:19 24 4
gpt4 key购买 nike

我必须验证使用 http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256 签名的 XmlSignature算法。由于使用 native .NET SignedXml 类不支持此算法,因此我使用 BouncyCaSTLe 实现了检查。

我的实现工作如下:

// read certificate
var bytes = Convert.FromBase64String("...");
var cert = new X509CertificateParser().ReadCertificate(bytes);
var ecPublicKeyParameters = (ECPublicKeyParameters)cert.GetPublicKey();

// load signed XmlDocument
var xDoc = new XmlDocument();
xDoc.Load("Response_Success.xml");

// get signature value
var nav = xDoc.CreateNavigator();
nav.MoveToFollowing("SignatureValue", "http://www.w3.org/2000/09/xmldsig#");
var signatureAsString = Regex.Replace(nav.InnerXml.Trim(), @"\s", "");
var signatureValue = Convert.FromBase64String(signatureAsString);

// get and canonicalize signed info
var signedInfo = xDoc.GetElementsByTagName("SignedInfo", "http://www.w3.org/2000/09/xmldsig#")[0];
// move used NS from the document root element to the SignedInfo element
var ns = RetrieveNameSpaces((XmlElement)signedInfo);
InsertNamespacesIntoElement(ns, (XmlElement)signedInfo);

// apply an XmlDsigC14NTransformation
var signedInfoStream = canonicalizeNode(signedInfo);

// hash signed info
var hashAlgorithm = SHA256.Create();
var hashedSignedInfo = hashAlgorithm.ComputeHash(signedInfoStream);

// check signature
var signer = SignerUtilities.GetSigner("ECDSA");
signer.Init(false, ecPublicKeyParameters);
signer.BlockUpdate(hashedSignedInfo, 0, hashedSignedInfo.Length);
var isSignatureValid = signer.VerifySignature(signatureValue);

错误发生在最后一条语句中,读取

System.InvalidCastException: Unable to cast object of type 'Org.BouncyCastle.Asn1.DerApplicationSpecific' to type 'Org.BouncyCastle.Asn1.Asn1Sequence'.

由于 XmlSignature 很可能是有效的(由官方认可的协会使用 Java 应用程序创建),我很确定错误出在前面的代码块中。任何人都可以提示我如何进行吗?

谢谢,菲利普

最佳答案

你编码正确吗?您可能想看看以下内容: Digital Signature Verification using BouncyCastle - ECDSA with SHA 256, C#

关于c# - 使用 BouncyCaSTLe 在 C# 中验证使用 ECDSA(使用 SHA256)签名的 XMLSignature 抛出 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11064013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com