Стараюсь верифицировать 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);
Так, что-то кажется неправильным с подписью, но я не могу понять. Надеюсь, кто-нибудь может помочь с хорошей идеей.
Кстати, предоставленные данные в этом примере были изменены, поэтому подпись будет оценена как false, если она будет работать.
Какую версию Bouncy Castle вы используете? –
Привет, это версия C# версии BouncyCastle.Crypto.dll, версия 1.7.4114.6375 – steve