Как мне прочитать открытый ключ RSA из файла PEM и использовать его для шифрования в BouncyCastle в C #? - PullRequest
0 голосов
/ 07 июня 2019

C # BouncyCastle содержит класс Org.BouncyCastle.Utilities.IO.Pem.PemReader, который, похоже, принимает файл открытого ключа RSA в формате PEM. Я посмотрел на эту ссылку: как я могу преобразовать открытый ключ pem в открытый ключ rsa с помощью bouncycastle в c #?

Но, похоже, в PemReader использовался несуществующий метод ReadObject. Поэтому вместо этого я написал следующий код.

var pemReader = new PemReader(File.OpenText(@"...rsa public key file path ..."));
var pemObject = pemReader.ReadPemObject();
var rsaPublicKeyBytes = pemObject.Content;

Как только я получаю открытые байты RSA, я не уверен, что делать дальше. Я хочу иметь возможность сделать следующее:

var rsaCipher = new RsaEngine();
var oaepEncoding = new OaepEncoding(rsaCipher, new Sha256Digest());
var publicKey = new RsaKeyParameters(...);
oaepEncoding.Init(true, publicKey);
var actualEncryptedBytes = oaepEncoding.ProcessBlock(plainBytes, 0, plainBytes.Length);

Полагаю, я не уверен в том, как создать RsaKeyParameters с открытыми байтами RSA. Может ли кто-нибудь указать мне правильное направление? Или я совершенно не туда иду?

1 Ответ

1 голос
/ 07 июня 2019

Вы используете неправильный PemReader, вы хотите тот из Org.BouncyCastle.OpenSsl.

РЕДАКТИРОВАТЬ: По какой-то причине OP настаивает на том, что этот класс не имеет ReadObject метод. Это так, и это можно увидеть здесь .

Как это:

using System;
using System.IO;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;

namespace ScratchPad
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            var pemReader = new PemReader(File.OpenText(@"/Users/horton/tmp/key-examples/myserver_pub.pem"));
            var pemObject = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)pemReader.ReadObject();
            var rsa = DotNetUtilities.ToRSA(pemObject);
            // ... more stuff ...
        }
    }
}
...