J'ai travaillé sur le signataire et le vérificateur numérique en utilisant Crypto ++. J'ai rencontré le problème suivant: mon signataire et vérificateur fonctionne bien sur les clés publiques et privées que j'ai générées par programmation en utilisant le premier exemple (Générer une paire de clés RSA et l'enregistrer) à partir de ce wiki. Mais quand j'utilise une autre paire de clés de test que j'ai été fourni pour tester, j'ai l'erreur suivante: "erreur de décodage de BER" en essayant de charger la clé pour la signature. J'ai cherché sur Internet, mais je n'arrive pas à résoudre le problème. Voici mes classes:Erreur de décodage BER lors du chargement de la clé
class DSUtility
{
protected:
DSUtility() = default;
template<typename KeyType, typename KeySourceType>
KeyType PrepareKey_(const std::string& key_source);
};
template<typename KeyType, typename KeySourceType>
KeyType DSUtility::PrepareKey_(const std::string& key_source)
{
CryptoPP::ByteQueue key_bytes;
KeySourceType(key_source.c_str(), true, new CryptoPP::Base64Decoder).TransferTo(key_bytes);
key_bytes.MessageEnd();
KeyType key;
key.Load(key_bytes); // FAILS WHEN TRYING TO SIGN WITH ANOTHER PRIVATE KEY
return key;
}
class Signer : private DSUtility
{
public:
Signer(const std::string& private_key);
std::string Sign(const std::string& data);
private:
typedef CryptoPP::RSA::PrivateKey PrivateKey;
CryptoPP::RSASS<CryptoPP::PKCS1v15, CryptoPP::SHA256>::Signer signer_;
};
Signer::Signer(const std::string& private_key) :
signer_(PrepareKey_<PrivateKey, CryptoPP::StringSource>(private_key))
{
}
std::string Signer::Sign(const std::string& data)
{
CryptoPP::SecByteBlock signature(signer_.SignatureLength());
signer_.SignMessage(CryptoPP::AutoSeededRandomPool(), (byte const*)data.c_str(), data.size(), signature);
return std::string(signature.begin(), signature.end());
}
une de mes clés (qui fonctionne) ressemble à ceci:
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAILkZnFV77ckeZkepDk1fvsE
qli05im29PTZq0ayWZsSgis+tpzP2KpSigWimAfkOCF36Y1Zb9E8VcxBaRbEEH0ObQTQdOl0
z1Cf0mViD2dQgH+8ZucU2gKy0YDpjIJ6wZM55azNZBg1s5J9PuDyM+nMRh5RiJqEpaXSXzgV...
autre regarde les éléments suivants:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDGwB5n/xMsDoqo+bGaws15FYGGjsJxCM2deHJZqV2QKfvkmStf
8HntPqaJ+mc9UA6ghN1uGndChg1PuHSNVaRU2x8fem/mFUhfOJaZcYich8JAy0nm
sJUOwoRqLfKjLWmqy0QZHXDDVw+sD5uq/oOvfFFjuYIcsskHQmGTfkdJrQIDAQAB...
Avez-vous essayé de supprimer cette ligne '----- BEGIN RSA PRIVATE KEY -----', évidemment différente? – mkl
Oui, je l'ai fait à la première étape :) –