У меня есть хранилище ключей publi c в файле pubkey.pem Ключ такой:
-----BEGIN PUBLIC KEY-----
MKJHHD...
...QAB
-----END PUBLIC KEY-----
У меня есть строка с данными
string data="montant=100&ref=9440-08490507&auto=096824&trans=921280968&abo=0&paiement=3DSECURE&carte=MasterCard&idtrans=187412503&erreur=00000"
И я есть подпись в строке
string signature="N52jAD1VgN/x2A2M/xTwRV3quQPGjxWzriWp70sVuf1EUVgpGb698JB2QtUHmEEdN+XBzZ0w/0Pqe4jg+XFigbNTFOqwIlZgHmXQerWwAudi3E5pIc6REOr1ewenCIJsWOMHGTtug/Pi4zPdS0x7fyFWmrBSYQ1Ti9uHF4AipHM="
Мне нужно проверить данные с помощью подписи с помощью openssl RSA + SHA1.
Я не знаю, как это сделать.
Прямо сейчас я использую Bouncy castel следующим образом:
public bool VerifySignature(string data, string signatureText)
{
// Using statements and error checking removed for brevity
string RootPath = Path.Combine(environnement.WebRootPath, "key");
string FichierCléPublique = Path.Combine(RootPath, "pubkey.pem");
var reader = new StreamReader(new FileStream(FichierCléPublique, FileMode.Open));
PemReader pemReader = new PemReader(reader);
RsaKeyParameters parameters = (RsaKeyParameters)pemReader.ReadObject();
RsaDigestSigner signer = (RsaDigestSigner)SignerUtilities.GetSigner("SHA1WithRSA");
signer.Init(false, parameters);
byte[] sigBytes = StringToByte(signatureText);
byte[] dataBytes = StringToByte(data);
signer.BlockUpdate(dataBytes, 0, dataBytes.Length);
bool isValid = signer.VerifySignature(sigBytes);
return isValid;
}
Но он всегда возвращает false ... даже с хорошими данными и подписью.
Может кто-нибудь помочь мне с куском кода показать, как это реализовать?
Спасибо большое