【问题标题】:How do I read RSA public key from PEM file and use it to encrypt in BouncyCastle in C#?如何从 PEM 文件中读取 RSA 公钥并使用它在 C# 中的 BouncyCastle 中进行加密?
【发布时间】:2019-06-07 08:13:25
【问题描述】:

C# BouncyCastle 包含一个名为 Org.BouncyCastle.Utilities.IO.Pem.PemReader 的类,它似乎采用 PEM 格式的 RSA 公钥文件。我看了这个链接:how can i convert 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;

获得 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);

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

【问题讨论】:

  • 您是否尝试过在流code 中使用 PEMReader 对象使用 (var keyreader = new StringReader(publickey)) { var pemReader = new PemReader(keyreader); var y = (RsaKeyParameters)pemReader.ReadObject(); } code

标签: c# .net-core cryptography rsa bouncycastle


【解决方案1】:

您使用了错误的PemReader,您想要来自Org.BouncyCastle.OpenSsl 的那个。

编辑:出于某种原因,OP 坚持认为此类没有 ReadObject 方法。确实如此,并且可以看到here。

像这样:

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 ...
        }
    }
}

【讨论】:

  • BouncyCastle 1.8.5 版在 PemReader 类上没有 ReadObject 方法。没有等效的方法可以给我 RsaKeyParameters。有什么建议么?换句话说,ReadPemObject 方法返回的 PemObject 不能转换为 RsaKeyParameters。
  • 再一次:您使用了错误的 PemReader 类。请重新阅读我的答案的第一行。 Org.BouncyCastle.OpenSsl.PemReader is: public object ReadObject()`的第 85 行。
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2015-03-21
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
相关资源
最近更新 更多