我正在尝试找到一种在不使用外部库的情况下,在C#中读取使用OpenSSL PKCS#8 RSA创建的私钥的方法。
有人知道我该如何做吗?
我正在尝试找到一种在不使用外部库的情况下,在C#中读取使用OpenSSL PKCS#8 RSA创建的私钥的方法。
有人知道我该如何做吗?
截至 .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 _);
此方法用于将 PKCS#8 格式的 RSA 私钥导入到 .NET 中,并返回一个 RSA
对象。这个对象可以用于解密或签名数据。
感谢您的回答。
我使用OpenSSL编写了一个创建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格式的私钥。我使用了this解析器来完成这个任务。
为了解密挑战,我们需要使用:
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咨询公司