2011-12-07 114 views
2

我正在嘗試在C++中使用WinCrypt APICryptoAPI/WinCrypt:如何用C++導入PEM文件中的私鑰?

我的應用程序需要加密,解碼,簽名和驗證文件,我知道如何做到這一點,只要我有正確的密鑰。但我的問題實際上是那不是生成這些密鑰的相同應用程序。

我有什麼是公共和私有密鑰中的文件以PEM格式:

和:

-----BEGIN RSA PUBLIC KEY----- 
[Base64 encoded] 
-----END RSA PUBLIC KEY----- 

經過一番研究,我發現如何導入公共密鑰:here和使用以下方法:

  • 的CreateFile & ReadFile的讀取該文件內容
  • CryptStringToBinary,與CRYPT_STRING_BASE64HEADER從PEM格式轉換爲DER格式(刪除從BASE64頁眉和頁腳和解碼)
  • CryptDecodeObjectExX509_PUBLIC_KEY_INFO
  • CryptImportPublicKeyInfo,導入密鑰

但現在,我的問題是這樣做的蒙山私鑰同樣的事情。 任何幫助將真的非常感謝:) 謝謝。

+0

Crypto API是用於專有加密,使用它的PGP只是更爲有用 – marinara

+0

是的,當然。但事實是我沒有選擇密鑰的格式:否則我會選擇CryptoAPI的專有格式。但是由於公鑰導入可能來自PEM格式,所以我認爲私鑰也是可能的。 – nikloskoda

回答

7

一個PEM私鑰可以PKCS_RSA_PRIVATE_KEY,然後調用CryptImportKey導入CAPI使用CryptDecodeObjectEx

我寫了一個示例,演示瞭如何使用PEM編碼的RSA私鑰對使用CAPI的數據進行簽名。這裏是一個鏈接:http://www.idrix.fr/Root/Samples/capi_pem.cpp

我希望這會有所幫助。

+0

謝謝Mounir。你已經救了我從死路一條。 (我試圖得到CRYPT_PRIVATE_KEY_INFO沒有成功,我懷疑我需要它)。 –

+0

任何想法如何做與DSA密鑰相同? –

相關問題