vérifier la signature openssl à l’aide de la bibliothèque crypto ++

J’essaie de vérifier la signature open-ssl en utilisant crypto ++, voici la partie open-ssl:

$ openssl genrsa 1024 >priv.pem $ openssl rsa -in priv.pem -pubout -out pubkey.pem $ openssl dgst -sha1 -sign privkey.pem data.txt > sign $ openssl dgst -sha1 -verify pubkey.pem -signature sign data.txt Verified OK 

Maintenant, dans mon code C ++:

 int main(int argc, char* argv[]) { try { RSA::PublicKey publicKey; const char * pubFilename = "pubkey.pem"; FileSource pubFile(pubFilename,true,new PEMSsortingpper(new Base64Decoder())); RSASSA_PKCS1v15_SHA_Verifier pub(pubFile); cout << "n: " << pub.GetTrapdoorFunction().GetModulus() << endl; cout << "e: " << pub.GetTrapdoorFunction().GetPublicExponent() << endl; string message = "data that is to be hashed and signed."; //same as data.txt ifstream file ("sign", ios::in | ios::binary | ios::ate); ifstream::pos_type sigSize; char* sig; if(file.is_open()) { sigSize = file.tellg(); sig = new char[sigSize]; file.seekg(0, ios::beg); if(!file.read(sig, sigSize)) { cout << "fail to read" << endl; } file.close(); } bool result = pub.VerifyMessage( (const byte*)message.c_str(), message.length(), (const byte*)sig, sigSize ); // Result if( true == result ) { cout << "Signature on message verified" << endl; } else { cout << "Message verification failed" << endl; } } // try catch( CryptoPP::Exception& e ) { std::cerr << "Error: " << e.what() << std::endl; } return 0; } 

Mais je reçois toujours la vérification du message a échoué

Etes-vous sûr que le data.txt ne contient pas un \n ?

Si ce n’est pas le cas, ajoutez-en un à la chaîne lietrale dans cette ligne comme suit:

 ssortingng message = "data that is to be hashed and signed.\n"; //same as data.txt 

Openssl prend une longueur limitée de données de chaîne, donc commencez par hachage avec sha1, puis envoyez les données à opensssl