Advertisement
Guest User

Untitled

a guest
May 28th, 2015
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <openssl/aes.h>
  3. #include <vector>
  4. #include <math.h>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8. typedef unsigned char byte_t;
  9. typedef std::vector<byte_t> bytes_t;
  10.  
  11. bytes_t aes_encrypt ( bytes_t& buff, int keylength ) {
  12.     bytes_t aes_key(keylength / 8, 0);
  13.  
  14.     size_t sz_buff = buff.size();
  15.  
  16.     bytes_t iv_enc(AES_BLOCK_SIZE, 'q');
  17.  
  18.     const size_t encslength = ceil((float)sz_buff / AES_BLOCK_SIZE);
  19.  
  20.     bytes_t enc_out(encslength * AES_BLOCK_SIZE, 0);
  21.  
  22.     AES_KEY enc_key;
  23.     AES_set_encrypt_key(&aes_key[0], keylength, &enc_key);
  24.     AES_cbc_encrypt(&buff[0], &enc_out[0], sz_buff, &enc_key, &iv_enc[0], AES_ENCRYPT);
  25.  
  26.     return enc_out;
  27. }
  28.  
  29. bytes_t aes_decrypt ( bytes_t& buff, int keylength ) {
  30.     bytes_t aes_key(keylength / 8, 0);
  31.  
  32.     size_t sz_buff = buff.size();
  33.  
  34.     bytes_t iv_dec(AES_BLOCK_SIZE, 'q');
  35.  
  36.     bytes_t dec_out(sz_buff, 0);
  37.  
  38.     AES_KEY dec_key;
  39.     AES_set_decrypt_key(&aes_key[0], keylength, &dec_key);
  40.     AES_cbc_encrypt(&buff[0], &dec_out[0], sz_buff, &dec_key,&iv_dec[0], AES_DECRYPT);
  41.  
  42.     return dec_out;
  43. }
  44.  
  45. void print(const bytes_t& vec) {
  46.     for (auto i = vec.begin(); i != vec.end(); ++i)
  47.         std::cout << (int)*i << ' ';
  48.         std::cout<<std::endl;
  49. }
  50. int main()
  51. {
  52.     bytes_t src(54);
  53.     std::iota (std::begin(src), std::end(src), 0); // Fill with 0, 1, ..., 99.
  54.     src.resize(64);
  55.     print(src);
  56.     bytes_t res = aes_encrypt(src, 256);
  57.     print(res);
  58.     bytes_t res2 = aes_decrypt(res, 256);
  59.     print(res2);
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement