我在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 ...即使有良好的数据和签名。
有人可以帮我提供一段代码来演示如何实现吗?
非常感谢