/** * @file AESCrypt.cpp * @brief AESCrypt class definitions * @author manzerbredes * @date 8 Mars 2015 * * Contain all definitions of AESCrypt class. * */ #include "AESCrypt.hpp" #include //Constructor AESCrypt::AESCrypt(){ this->hash=HASHCrypt(); //Init hash attribute } //Destructor AESCrypt::~AESCrypt(){ } //Encrypt string std::string AESCrypt::encrypt(std::string key, std::string data){ //Generate SHA-256 byte digest[32]; hash.getSHA_256(key, digest, (int)sizeof(digest)); //Add padding for AES /*char pad=0x01; int tmpL=data.length(); while(tmpL % 128 != 0){ tmpL++; pad+=1; } std::cout << "pad:"<< std::hex << pad; while(data.length() % 128 != 0){ data+=pad; } std::cout << data.length();*/ //Contain data encrypted std::string cipher; //Use try, catch to be ensure no problems happening try{ //Create encoder to encrypt data CryptoPP::ECB_Mode::Encryption encoder; encoder.SetKey( digest, sizeof(digest) ); //Encrypt data with StreamTransformationFilter with NO PADDING CryptoPP::StringSource ss1(data, true, new CryptoPP::StreamTransformationFilter( encoder, new CryptoPP::StringSink( cipher ), CryptoPP::StreamTransformationFilter::ZEROS_PADDING ) ); } catch( CryptoPP::Exception& e ) { std::cerr << e.what() << std::endl; exit(EXIT_FAILURE); } //return encrypted data return cipher; } //Decrypt string std::string AESCrypt::decrypt(std::string key, std::string data){ byte digest[32]; hash.getSHA_256(key, digest, (int)sizeof(digest)); //Contain data decrypted std::string cipher; //Use try, catch to be ensure no problems happening try { //Create decoder to encrypt data CryptoPP::ECB_Mode< CryptoPP::AES >::Decryption decoder; decoder.SetKey( digest, sizeof(digest) ); //Decrypt data with StreamTransformationFilter with NO PADDING CryptoPP::StringSource ss3( data, true, new CryptoPP::StreamTransformationFilter( decoder, new CryptoPP::StringSink( cipher ), CryptoPP::StreamTransformationFilter::ZEROS_PADDING ) ); } catch( CryptoPP::Exception& e ) { std::cerr << e.what() << std::endl; exit(1); } int i=0; for(i=0;i