如何在 C# 中导入 PKCS#8 RSA 私钥(由 OpenSSL 创建)

Mak*_*kah 5 c# rsa pkcs#8 private-key

我试图找到一种方法来读取在 C# 中使用 OpenSSL PKCS#8 RSA 创建的私钥,而不使用外部库。

有人知道我该怎么做吗?

And*_*lin 5

从 .Net Core 3 开始:

using System.Security.Cryptography;

// ...

// I had my PK in base64
var pkBase64 = "MIIEvQI...";

var rsa = RSA.Create(); 
rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(pkBase64), out _);

Run Code Online (Sandbox Code Playgroud)

供参考:https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa.importpkcs8privatekey? view=net-5.0


mdb*_*mdb 2

使用外部库执行此操作的最简单方法是使用(免费) Chillkat 公钥/私钥组件:使用该组件,只需几行代码即可导入密钥,并且如果您愿意支付 149 美元对于库的其余部分来说,它也将使处理一般的加密概念变得更加容易。

与常规的 Microsoft .NET Framework 不同,Mono 项目似乎确实有一个PKCS8 实现,可以使用完整的 C# 源代码。如果您绝对不能依赖外部库,假设与 Mono 代码关联的 (LGPL 2.0) 许可证适合您,这可能适合作为起点...

最后,PKCS #8 格式不太难解析,并且 RSA/DSA 密钥对对象符合PKCS #11,并且一旦您弄清楚所有位的去向,就可以相对容易地转换为 .NET X509Certificate — 我实际上不久前在 VB.NET 中做到了这一点,但不幸的是我无法共享该代码。