我正在为第三方API构建存根。向第三方提出的请求必须使用提供的公钥加密。作为存根的一部分,我想解密传入的请求。
我计划更改我的调用代码使用的公钥,以便我可以使用我的私钥解密它。
我有一个自签名证书,用于我希望可以重复使用的应用程序的其他部分。
我遇到的问题是以我需要的格式从证书中获取公钥。
基于Ian Boyd(this one和this one)的几个答案,我需要获取公钥的格式是" X.509 SubjectPublicKeyInfo / OpenSSL PEM ",这是我从第三方收到的密钥的格式。例如:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcZ/r0nvJyHUUstIB5BqCUJ1CC
Cd1nzle4bEpPQJ/S0Wn7mV2FDAeh+UcbVhZu9n+5zypYNjeZKapPqBLoT8eCK51y
Kpzeb8LuEm3P8PK4xN18XBrIF1GprN8IIgSdK9f5SwnemutcURrY+PlWnvj7N5s/
03RlJA3/NHVXpPW/VQIDAQAB
-----END PUBLIC KEY-----
我已尝试使用X509Certificate2.GetPublicKey方法,然后base64
对其进行编码,但这为我提供了键入" PEM DER ASN.1 PKCS#1 RSA "格式。
有谁知道如何以我需要的格式获取公钥?我不一定需要代码中的密钥,我只需要一个可以存储在我的数据库中的字符串值。
我的证书/私人/公共/加密知识仅限于任何帮助,我们将非常感谢!
答案 0 :(得分:0)
我能够使用Bouncy Castle的PemWriter
以{I>的格式构建公钥:
var cert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(x509certificate);
using (var stringWriter = new StringWriter())
{
var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(stringWriter);
pemWriter.WriteObject(cert.GetPublicKey());
var pem = stringWriter.ToString();
}