RSA.Verify проблемы в .Net Core 3.0 - PullRequest
0 голосов
/ 23 октября 2019

Я работаю с третьей стороной, которая отправляет мне сертификат через байтовый массив. Они отправляют мне 3 строки в XML-документе, которые включают в себя x509Data, SignatureValue и DigestValue (для отладки).

Они хотят, чтобы я проверил, что SignatureValue является действительным, используя открытый ключ сертификата, содержащийся в сертификате x509Data. Я правильно заполнил сертификат, но когда я пытаюсь проверить, он всегда возвращает false.

Вот мой код:

byte[] SignatureValueBytes = Convert.FromBase64String(Signature.SignatureValue);
byte[] x509DataBytes = Convert.FromBase64String(Signature.x509Data);
byte[] DigestValueBytes = Convert.FromBase64String(Signature.DigestValue);
X509Certificate2 cert = new X509Certificate2(x509DataBytes);
using (RSA RSA = (RSA)cert.PublicKey.Key)
{
    bool a = RSA.VerifyData(x509DataBytes, SignatureValueBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

Signature. * - это строка из файла XML. Может ли какая-то добрая душа указать, где я иду не так?

1 Ответ

0 голосов
/ 26 октября 2019

Ваш код, как написано, пытается проверить, что SignatureValueBytes является подписью, которая подписана x509DataBytes с использованием RSASSA-PKCS1-SHA256.

Предполагая, что вы получили право на часть RSASSA-PKCS1-SHA256,вы, вероятно, хотите использовать VerifyHash и DigestValueBytes вместо VerifyData и x509DataBytes. (Вы также хотите использовать cert.GetRSAPublicKey() вместо cert.PublicKey.Key)

byte[] SignatureValueBytes = Convert.FromBase64String(Signature.SignatureValue);
byte[] x509DataBytes = Convert.FromBase64String(Signature.x509Data);
byte[] DigestValueBytes = Convert.FromBase64String(Signature.DigestValue);
X509Certificate2 cert = new X509Certificate2(x509DataBytes);
using (RSA RSA = cert.GetRSAPublicKey())
{
    bool a = RSA.VerifyHash(DigestValueBytes, SignatureValueBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...