簡體   English   中英

使用BouncyCastle驗證在C#中用ECDSA(帶有SHA256)簽名的XMLSignature拋出InvalidCastException

[英]Verifying XMLSignature signed with ECDSA (with SHA256) in C# using BouncyCastle throws InvalidCastException

我必須驗證使用http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256算法簽名的XmlSignature。 由於使用本機.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應用程序的正式認可的關聯創建),所以我很確定錯誤是在前面的代碼塊中。 任何人都可以給我提示如何進行嗎?

謝謝菲利普

您編碼正確嗎? 您可能需要看看以下內容: 使用BouncyCastle進行數字簽名驗證-具有SHA 256,C#的ECDSA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM