我嘗試來驗證ECDSA(256)的簽名,我必須這樣做,是在低於給定的格式的公鑰,原始數據和簽名的唯一數據:InvalidCastException的C#的充氣城堡驗證簽名
string pubKey_ecdsa = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+noecsW+vdfd8DNo5dsAxU4DOaNt6PGmSCLFo/EvQG4xmVzv464qXvDPIrPN8GtLnubzoa9rtWJD52VlGOpFsA==";
string data_ecdsa = ";\"4399901526945\";\"AAAA-BBBBBBBBB-123456789000\";\"5010112544615\";\"20130802063109143\";";
string signature_ecdsa = @"BEcwRQIgJFwnCvm8lRjlRt+G+f4viJktDYVyOiXUd5BJ0V761eECIQDBTHLjJI7KK3FhczEHjunenYWXylDdW91jbS23EmeznA==";
當我嘗試使用充氣城堡通過調用來驗證簽名:
//Create the public key from string
AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(Convert.FromBase64String(pubKey_ecdsa));
// create byte array from string
byte[] b_signature = Convert.FromBase64String(signature_ecdsa);
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] inputData = encoder.GetBytes(data_ecdsa);
ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
signer.Init(false, pubKey);
signer.BlockUpdate(inputData, 0, inputData.Length);
bool valid = signer.VerifySignature(b_signature);
我收到InvalidCastException
:
Unable to cast object of type 'Org.BouncyCastle.Asn1.DerOctetString'
to type 'Org.BouncyCastle.Asn1.Asn1Sequence'.
在下面一行:
bool valid = signer.VerifySignature(b_signature);
那麼,有什麼不對勁帶有簽名,但我想不通。我希望有人能提供一個好主意。
順便說一下,本例中提供的數據已被修改,所以簽名將被評估爲假,如果它能工作的話。
你使用什麼版本的Bouncy城堡? –
嗨,它是C#版本的BouncyCastle.Crypto.dll,版本爲1.7.4114.6375 – steve