C#dotnet核心使用公共P​​em密钥进行OpenSSL签名身份验证SHA1

时间:2020-04-27 10:35:28

标签: c# .net-core openssl cryptography bouncycastle

我在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 ...即使有良好的数据和签名。

有人可以帮我提供一段代码来演示如何实现吗?

非常感谢

0 个答案:

没有答案