Подписать файл само выпущенным сертификатом RSA используя с#

Нужно выпустить сертификаты RSA и подписать ими файлы приватным ключом. Сертификаты генерирую по аналогии с https://habr.com/ru/post/497160/ они генерируются и даже импортируются в личные сертификаты.

 var rsaParam = privateCert.GetRSAPrivateKey().ExportParameters(false);
 var rsa = new RSACryptoServiceProvider();
 rsa.ImportParameters(rsaParam);

 byte[] data = Encoding.UTF8.GetBytes("Data to be signed");

 byte[] signature = rsa.SignData(data, "SHA256");

Появляется ошибка Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: "Набор ключей не существует".

Может как то нужно по другому загружать сертификат?


Ответы (1 шт):

Автор решения: Дмитрий Валерьевич

Все как обычно решается достаточно просто: Подписываем так:

       `byte[] data = Encoding.UTF8.GetBytes(msg);

        var cert = new X509Certificate2(key);

        var privateKey = cert.GetRSAPrivateKey();

        var signature = privateKey.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);` 

где key в бинарном виде сам сертификат (обязательно с закрытым ключом)

→ Ссылка