2017-03-21 29 views
0

我想用openssl私鑰解密一條消息。當我使用私鑰按以下格式在OpenSSL中讀取沒有封裝標頭的Base64私鑰

-----BEGIN RSA PRIVATE KEY----- 
MIICXgIBAAKBgQDDEOX/tFJZrgR0dtTN2/jgPAJjWKE68aw8ayYaGn9fo1sJAE3C 
uH6Ym3hu775Enfd5DhtJ38g8RCFLzGVP/LW6n4+LsKS5HRZTGcDkpME0sVoLHLZd 
w8z4xZe5h+lT0jwkap5BNyHJCSddipxzjQIEtW+w8V6BkKkFw6UYN1Xn5QIDAQAB 
AoGAUeS0Ssfvksrl/+crrElfkPRgpEi/V7nCb5Mkae0Z8JLqUzsXalp+e585zolE 
PhZ7oQz1E+ypafPIbsQe/JfByx3itUk7J8+bZO4TpE8n5Afz8EdZLIqJU11MoafH 
mWYYWsoMdymgxasuu0ygyeswP42/aw1M+qQgoWBSoPtgLrkCQQDsygWQRI868JKJ 
OXzeKV6HTKjGXg37Zm050UaPk2a8inGk6F5RqH1+IZ4istrlcJTpJTuQCsVHJ+SQ 
nLveL09vAkEA0uRPeSdXbi92AR/5fj2Xh2APerYjRgK11nh4QEiqbmKyNdW7r9zb 
tIQiL9f4AXvcwIVnSWVgiTCwWOa9w8lT6wJBAOMlWPjwC8YqiSeCMjqbzMZVz4Gb 
MCZ+N0FDdEC+0csDs8jR78i9rMSWUzBOCpYWzYJp6R1gd6auqh/feojFMZkCQQCO 
Gkly2Y+QL2rUVzdGWTpBffjwNsqN4kWkvohIyK4Os3Jh1CMj3S4t9NsUYfI7Dbsx 
/rIaQrVJvAUX4mL8Ci0BAkEAuAZBSTmd7MQybVlWCP1AVvlMyW1CV/Mts4tLsGO5 
NRMuXY0CrQaO69MW4nuHCSmshBcNB7ahGxYYYMaHmem3QQ 
-----END RSA PRIVATE KEY----- 

當我嘗試用無encapsullation頭(-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----)它是失敗的相同的密鑰我的執行工作正常。

這些標題對於密鑰是必需的嗎?

如果我想使用沒有標題的密鑰,我應該使用哪個API的OpenSSL?

+0

沒有其他API同樣易於使用。爲什麼這是一個問題?應該很容易添加或刪除頁眉和頁腳。 –

+0

這不是一個問題。我的客戶將把關鍵字作爲輸入而不包含頭文件。因此我正在尋找使用任何API構建RSA結構。我能夠做strcat()來包含頁眉和頁腳。但是這看起來有些硬編碼,這是檢查替代者的原因 –

+1

請參閱[如何使用openssl生成RSA私鑰?](http://stackoverflow.com/a/30493975/608639)它提供了有關不同編碼格式。它的缺點是,如果它的PEM編碼,那麼它需要封裝頭。如果你不需要頭文件,那麼使用ASN.1/DER。你處於一個不太常見的中間地帶 - 你需要Base64編碼的ASN.1/BER。通常你只是使用PEM。但是可以放棄標題,Base64解碼,然後使用'd2i_RSAPrivateKey_bio'來讀取它。 – jww

回答

0

密鑰格式的類型由PEM編碼密鑰的頁眉和頁腳定義。它在內部只是一個PKCS#1私鑰。有關格式的更多信息,您可以查看this Q/A或ASN.1解碼密鑰here

因此,雖然所有的信息都是基於64位編碼,但在中間實現中可能無法直接解析它,主要是因爲結構的類型未知。

但是,您可以對base64進行解碼並將其用作OpenSSL中的密鑰。在這種情況下,您可能需要指定-inform DER或類似的東西。