如何从 PEM 文件中读取 RSA 公钥并使用它在 C# 中的 BouncyCastle 中进行加密?

Rag*_*ghu 1 c# cryptography rsa bouncycastle .net-core

C# BouncyCastle 包含一个名为 Org.BouncyCastle.Utilities.IO.Pem.PemReader 的类,该类似乎采用 PEM 格式的 RSA 公钥文件。我查看了这个链接:how can I conversion pem public key to rsa public key with bouncycastle in c#?

但它似乎在 PemReader 上使用了不存在的方法,称为 ReadObject。所以我改为编写以下代码。

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

一旦我获得 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);
Run Code Online (Sandbox Code Playgroud)

我想我不确定如何使用 RSA 公共字节构造 RsaKeyParameters。有人能指出我正确的方向吗?或者我在这里完全走错路了?

Jam*_*olk 5

你用错了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 ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)