summaryrefslogtreecommitdiff
path: root/CryptClass/AESCrypt.cpp
diff options
context:
space:
mode:
authormanzerbredes <loic.guegan_secondary@yahoo.fr>2015-03-09 12:51:23 +0400
committermanzerbredes <loic.guegan_secondary@yahoo.fr>2015-03-09 12:51:23 +0400
commit7d2c4734224eb7f6cf699bc84f505c06c4394b35 (patch)
tree070330590915595ec740acfeea5a92c742f427fb /CryptClass/AESCrypt.cpp
parent1574c191c3a6909e2b932fb32d6c63dc89e264b1 (diff)
AES first release. Add method to HASHCrypt class.
Diffstat (limited to 'CryptClass/AESCrypt.cpp')
-rw-r--r--CryptClass/AESCrypt.cpp117
1 files changed, 117 insertions, 0 deletions
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 <iomanip>
+//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<CryptoPP::AES>::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<cipher.length();i++){
+ if(cipher[i]=='\0')
+ break;
+ }
+ cipher.erase(i,cipher.length()-1);
+ //return decrypted data
+ return cipher;
+}