C# do tnet core openssl подпись Veryaication SHA1 с открытым ключом c ключ pem - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть хранилище ключей 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 ... даже с хорошими данными и подписью.

Может кто-нибудь помочь мне с куском кода показать, как это реализовать?

Спасибо большое

...