Al3XS0n

Untitled

May 2nd, 2022
958
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. void cyclic_write(char* buffer, int need_to_write) {
  2.     while (need_to_write != 0) {
  3.         int bytes_writen = write(STDOUT_FILENO, buffer, need_to_write);
  4.  
  5.         need_to_write -= bytes_writen;
  6.     }
  7. }
  8.  
  9. void decrypt(unsigned char* password, unsigned char* salt) {
  10.     EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
  11.  
  12.     unsigned char key[1024];
  13.     unsigned char iv[1024];
  14.  
  15.     memset(key, 0, sizeof key);
  16.     memset(iv, 0, sizeof iv);
  17.  
  18.     EVP_BytesToKey(
  19.         EVP_aes_256_cbc(),
  20.         EVP_sha256(),
  21.         salt,
  22.         password, strlen(password),
  23.         1,
  24.         key,
  25.         iv
  26.     );
  27.  
  28.     EVP_DecryptInit(ctx, EVP_aes_256_cbc(), key, iv);
  29.  
  30.     int bytes_read = 0;
  31.     unsigned char encrypted_buffer[2048];
  32.     unsigned char decrypted_buffer[2048];
  33.     int buffer_size = 1024;
  34.     memset(encrypted_buffer, 0, sizeof(encrypted_buffer));
  35.     memset(decrypted_buffer, 0, sizeof(decrypted_buffer));
  36.     int decrypted_text_len = 0;
  37.  
  38.     while ((bytes_read = read(STDIN_FILENO, encrypted_buffer, buffer_size)) > 0) {
  39.         EVP_DecryptUpdate(ctx, decrypted_buffer, &decrypted_text_len, encrypted_buffer, bytes_read);
  40.        
  41.         cyclic_write(decrypted_buffer, decrypted_text_len);
  42.     }
  43.  
  44.     EVP_DecryptFinal(ctx, decrypted_buffer, &decrypted_text_len);
  45.  
  46.     cyclic_write(decrypted_buffer, decrypted_text_len);
  47.  
  48.     EVP_CIPHER_CTX_free(ctx);
  49. }
  50.  
  51. void read_salt(unsigned char* salt) {
  52.     int bytes_read = 0;
  53.     int total_bytes = 0;
  54.  
  55.     // reading "Salted_"
  56.     unsigned char buffer[100];
  57.     memset(buffer, 0, sizeof buffer);
  58.     while (total_bytes != strlen("Salted__")) {
  59.         bytes_read = read(STDIN_FILENO, buffer, strlen("Salted__") - total_bytes);
  60.         total_bytes += bytes_read;
  61.     }
  62.  
  63.     total_bytes = 0;
  64.  
  65.     // reading salt with salt_len = PKCS5_SALT_LEN
  66.     while (total_bytes != PKCS5_SALT_LEN) {
  67.         bytes_read = read(STDIN_FILENO, salt + total_bytes, 1);
  68.         total_bytes += bytes_read;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment