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

有人知道我该怎么做吗?

有帮助吗?

解决方案

最简单的方法来做到这一点 外部库,正在使用(免费) Chillkat 公钥/私钥组件: :使用它,可以使用导入密钥来完成 只需几行代码 如果您愿意为该库的其余部分支付 149 美元左右,那么处理一般的加密概念也会变得更加容易。

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

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

其他提示

谢谢您的回答。

我的脚本来创建RSA密钥i使用的OpenSSL丝毫:

(Linux的脚本)

openssl genrsa -out ${NAME}_openssl.key 2048
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER

在C#,我们需要专用密钥以XML格式。我用解析器做到这一点。

要解密,我们需要使用去挑战:

  byte[] challange = server.getChallenge();

  RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();

  rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);

  byte[] plaintext = rsaProvider.Decrypt(challange, false);

要加密丝毫服务器证书我们需要使用:

  RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;

  byte[] answer = RsaProvider.Encrypt(plaintext, false);

感谢JavaScience咨询

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top