From 7d2c4734224eb7f6cf699bc84f505c06c4394b35 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Mon, 9 Mar 2015 12:51:23 +0400 Subject: AES first release. Add method to HASHCrypt class. --- CryptClass/AESCrypt.cpp | 117 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) (limited to 'CryptClass/AESCrypt.cpp') diff --git a/CryptClass/AESCrypt.cpp b/CryptClass/AESCrypt.cpp index e69de29..78a553e 100644 --- a/CryptClass/AESCrypt.cpp +++ b/CryptClass/AESCrypt.cpp @@ -0,0 +1,117 @@ +/** + * @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