2011-06-02 2 views
3

J'essaie de signer un message en utilisant une clé privée qui est cryptée, j'ai bien sûr le mot de passe, donc j'essaie de décrypter le clé donc je peux l'utiliser pour signer.Comment décrypter la clé privée cryptée PKCS8 DER en utilisant le mot de passe, crypto ++

J'utilise la bibliothèque C++ crypto++, c'est le code que je suis en train d'utiliser pour lire la clé de fichier

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

En faisant cela, il monte un CryptoPP::DefaultDecryptor::KeyBadErr, je sais que je le mot de passe correct parce que je réussi à déchiffrer la clé en utilisant OpenSSL avec la ligne de commande suivante:

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

Ceci est mon premier post, je ne sais pas si je suis toutes les règles de poser la question, mais tout aide ou un conseil sera apprécié.

Cordialement,

lourd

+0

Voir [Pack PEM] (http://www.cryptopp.com/wiki/PEM_Pack) sur le wiki Crypto ++. Mais il manque encore le format crypté PKCS # 8. – jww

Répondre

3

PKCS # 8 utilise un format de chiffrement spécifique qui n'a rien à voir avec Crypto ++ 's DefaultDecryptorWithMAC. Vous pouvez trouver les détails dans la spécification ici - http://www.rsa.com/rsalabs/node.asp?id=2130

Malheureusement Crypto ++ ne supporte pas les clés cryptées PKCS # 8 actuellement. Avec le support ASN.1 et crypto dans la bibliothèque, vous pouvez certainement l'implémenter vous-même, mais il peut être plus simple de décrypter simplement la clé en utilisant l'outil de ligne de commande openssl. Vous pouvez également utiliser openssl dans votre programme ou une autre bibliothèque prenant en charge les clés PKCS # 8 cryptées. Crypto ++ prend désormais en charge les clés codées PEM, y compris celles cryptées sous OpenSSL.

Questions connexes