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

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

有人知道我怎么做吗?

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

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

最后, PKCS#8格式解析并不困难,RSA / DSA密钥对对象按照PKCS#11进行操作 ,一旦找出所有位的位置,相对容易转换为.NET X509Certificate – I实际上在VB.NET中实现了这一点,但不幸的是我无法共享该代码。

感谢您的回答。

我使用OpenSSL whit创建RSA密钥的脚本:

(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格式的privateKey。 我使用这个解析器来做到这一点。

要解密de challenge,我们需要使用:

  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 Consulting