2011-06-02 226 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。