如何在 C# 中导入 PKCS#8 RSA 私钥(由 OpenSSL 创建)
-
19-09-2019 - |
题
我试图找到一种方法来读取在 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咨询
不隶属于 StackOverflow