Шифрование OpenSSL AES 256 в C - PullRequest
       5

Шифрование OpenSSL AES 256 в C

0 голосов
/ 08 ноября 2019

Я просто пытаюсь выполнить шифрование и дешифрование с использованием OpenSSL. Это код, который я нашел в StackOverflow:

Текст для шифрования: = "a1 45 91 из 8d 3c 75 53 7a b7 a9 ef 62 d7 d7 a7" ключ 256 байтов = "ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF123 * 83867

87 *Проблема в том, что я не знаю, как работают AES_encrypt и AES_decrypt и как должен быть ввод?
#include <stdio.h>
#include <openssl/aes.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/rand.h>


//static const unsigned char key[]={01234567890123456789012345678900};


int main()
{


    int keylength;
    printf("Give a key length [only 128 or 192 or 256!]:\n");
    scanf("%d", &keylength);

    /* generate a key with a given length */
    unsigned char aes_key[keylength/8];
    memset(aes_key, 0, sizeof(aes_key));
    aes_key[32] = "";
    /*if (!RAND_bytes(aes_key, keylength))
     {
        exit(-1);
     }*/
    aes_key[keylength-1] = '\0';

    //unsigned char text[] = {"a1", "45","91" ,"de", "8d"," 3c" ,"75" ,"53"," 7a" ,"b7", "a9" ,"ef" ,"62", "d7", "d7", "a7"}; //Assign text to be encrypted
    unsigned char text[]= "a14591de8d3c75537ab7a9ef62d7d7a7";
    unsigned char enc_out[AES_BLOCK_SIZE]; //Set to 16 bytes
    unsigned char dec_out[AES_BLOCK_SIZE];

    AES_KEY enc_key, dec_key; //establish AES enc and dec key

    AES_set_encrypt_key(aes_key, 128, &enc_key);
    AES_encrypt(text, enc_out, &enc_key);

    AES_set_decrypt_key(aes_key, 128, &dec_key);
    AES_decrypt(enc_out, dec_out, &dec_key);

    int x;

    printf("original:\t");
    for(x=0;*(text+x)!=0x00;x++)
    printf("%X ",*(text+x));
    printf("\nencrypted:\t");
    for(x=0;*(enc_out+x)!=0x00;x++)
    printf("%X ",*(enc_out+x));
    printf("\ndecrypted:\t");
    for(x=0;*(dec_out+x)!=0x00;x++)
    printf("%X ",*(dec_out+x));
    printf("\n");

    return 0;
}

Команда для компиляции файла: gcc -g open_ssl_1.c -o openssl_aes -lcrypto

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...