2016-11-24 189 views
0

我正在構建第三方API的存根。向第三方提出的請求必須使用提供的公鑰進行加密。作爲存根的一部分,我想解密傳入的請求。從自簽名證書生成X.509 SubjectPublicKeyInfo/OpenSSL PEM公鑰

我打算更改我的調用代碼使用的公鑰,以便我可以使用我的私鑰對其進行解密。

我有一個自簽名證書,正用於應用程序的其他部分,我希望我可以重複使用。

我遇到的問題是以我需要的格式取出證書中的公鑰。

基於由伊恩·博伊德(this onethis 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

我是能夠建立格式使用充氣城堡的PemWriter公鑰我需要:

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(); 
}