2011-06-02 556 views
3

我想簽署一條消息使用加密的私鑰,我當然有密碼,所以我試圖解密關鍵所以我可以用它來簽名。如何解密PKCS8 DER加密私鑰使用密碼,在crypto ++

我使用C++庫crypto++,這是我想用它來從文件中讀取

string keyString; 
FileSource fs(keyFileName.c_str(), true, new DefaultDecryptorWithMAC(passphrase, new StringSink(keyString))); 

在這樣做時,它上升一個CryptoPP::DefaultDecryptor::KeyBadErr關鍵的代碼,我知道我有正確的密碼,因爲我設法使用OpenSSL的使用下面的命令行來解密密鑰:

openssl pkcs8 -inform DER -passin pass:PASSPHRASE < emisor.key 

這是我的第一篇文章,我不知道我是否已經遵守了所有的規則要問的問題,但任何幫助或提示將不勝感激。

問候,

+0

Crypto ++現在支持PEM編碼密鑰,包括在OpenSSL下加密的密鑰。請參閱Crypto ++ wiki上的[PEM Pack](http://www.cryptopp.com/wiki/PEM_Pack)。但它仍然缺少PKCS#8加密格式。 – jww 2015-04-30 18:59:33

回答

3

PKCS#8使用具有無關,與特定的加密格式加密+的DefaultDecryptorWithMAC。您可以在此處查看詳細信息 - http://www.rsa.com/rsalabs/node.asp?id=2130

不幸的是,Crypto ++本身不支持加密的PKCS#8密鑰。通過庫中的ASN.1和加密支持,您當然可以自己實現它,但使用openssl命令行工具簡單解密密鑰可能更容易。或者你可以在你的程序中使用openssl,或者在支持加密的PKCS#8密鑰的其他庫中使用openssl。