RSA шифрует строку из открытого ключа PEM в ядре dotnet

Я пытаюсь зашифровать строку, используя файл открытого ключа PEM в ядре dotnet (1.1), и мой вопрос: как мне это сделать?

Я думал, что это будет просто случай:

var cert = new X509Certificate2("path_to_public_key.pem");
using (var rsa = cert.GetRSAPublicKey())
{
    // encrypt here
}

Однако, когда я пытаюсь обновить сертификат, я получаю следующую ошибку:

ошибка: 0D07803A: процедуры кодирования asn1: ASN1_ITEM_EX_D2I: вложенная ошибка asn1

Файл PEM выглядит так:

-----BEGIN PUBLIC KEY-----
... ANBgkqhkiG9w0BAQEFA ...
(loads more text)
-----END PUBLIC KEY-----

Я проверил файл pem, и нигде нет посторонних символов ^ M (из предполагаемой причины ошибки здесь).

(Я использую macOS Sierra, если это имеет значение)

Любая помощь будет принята с благодарностью!


person stush    schedule 12.08.2017    source источник
comment
Похоже, у вас есть открытый ключ, а не сертификат. Думаю, тебе не стоит использовать X509Certificate2.   -  person Artjom B.    schedule 12.08.2017
comment
@ArtjomB. Спасибо! Ты отправил меня по правильному пути. (Это так очевидно, когда кто-то указывает на это!).   -  person stush    schedule 12.08.2017


Ответы (1)


Комментарий Artjom B направил меня на верный путь. Открытый ключ действительно не является сертификатом.

Решение взято из этого отличного сообщения.

Для ядра dotnet (у которого нет класса RSACryptoServiceProvider) я сделал несколько незначительных изменений. Вы можете вернуть объект RSAParameters из GetRSAProviderFromPemFile, а затем использовать его, например:

using (var rsa = RSA.Create()
{
   rsa.ImportParameters(GetRSAProviderFromPemFile("path_to_pem.pem"));
   var encrypted = rsa.Encrypt( ... );
}
person stush    schedule 12.08.2017
comment
Как вы инициализировали RSAParameters с данным примером GetRSAProviderFromPemFile? - person niklas-e; 04.12.2018
comment
Но RSACryptoServiceProvider доступен в .NET Core начиная с версии 1.0 docs.microsoft.com/en-us/dotnet/api/ - person mshwf; 22.09.2020