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

时间:2009-11-12 13:49:28

标签: c# rsa private-key pkcs#8

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

有人知道我该怎么做吗?

2 个答案:

答案 0 :(得分:3)

使用外部库执行此操作的最简单方法是使用(免费)Chillkat Public / Private Key Component:使用该方法,可以使用just a few lines of code导入密钥,如果你愿意为图书馆的其余部分支付149美元左右的费用,这样就可以更轻松地处理一般的加密概念。

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

最后,PKCS #8 format并不难解析,并且RSA / DSA密钥对对象按照PKCS #11进行,并且一旦找出所有对象,就相对容易转换为.NET X509Certificate这些东西 - 我实际上是在VB.NET中实现了这一点,但不幸的是我无法共享该代码。

答案 1 :(得分:2)

感谢您的回答。

我使用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。我使用this解析器来执行此操作。

要解密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