Шифрование и дешифрование не показывают правильное значение - PullRequest
0 голосов
/ 23 мая 2018

мой код выглядит следующим образом

unsigned char aes_key[]= "asytfuhcilejnco";
unsigned char input_data[]= "Sandeep";
unsigned char enc_buffer[sizeof(input_data)+1];
unsigned char dec_buffer[sizeof(input_data)+1];

AES_KEY enc_key,dec_key;
unsigned char iv[AES_BLOCK_SIZE];

int main()
{

    memset(iv,0x00,AES_BLOCK_SIZE);
    AES_set_encrypt_key(aes_key,sizeof(aes_key)*8,&enc_key);
    AES_cbc_encrypt(input_data,enc_buffer,sizeof(input_data),&enc_key,iv,AES_ENCRYPT);
    enc_buffer[sizeof(input_data)+1]='\0';//b

    memset(iv,0x00,AES_BLOCK_SIZE);
    AES_set_decrypt_key(aes_key,sizeof(aes_key)*8,&dec_key);
    AES_cbc_encrypt(enc_buffer,dec_buffer,sizeof(input_data),&dec_key,iv,AES_DECRYPT);
    dec_buffer[sizeof(input_data)+1]='\0';//a

    cout<<"input_data="<<input_data<<endl;
    cout<<"enc_buffer="<<enc_buffer<<endl;
    cout<<"dec_buffer="<<dec_buffer<<endl;
}

Я использую input_data в качестве данных для шифрования.2 буфера enc_buffer и dec_buffer для хранения зашифрованных и дешифрованных данных.Но когда я запускаю следующую программу, буферы не показывают дешифрованные данные, совпадающие с оригинальными входными данными. Если я прокомментирую строки "a" и "b", значения зашифрованных и дешифрованных данных совпадают. Но в этом случае исходные данныепоказано в зашифрованных данных.

вывод программы

input_data=Sandeep
enc_buffer=X��8��Ȏ
dec_buffer=2���yT�

вывод программы с комментариями a и b

input_data=Sandeep
enc_buffer=X��8��Ȏ��Yٔ�iSandeep
dec_buffer=Sandeep

1 Ответ

0 голосов
/ 23 мая 2018

AES - это алгоритм блочного шифрования.Таким образом, enc_buffer должно быть объявлено как ниже

unsigned char enc_buffer[AES_BLOCK_SIZE];

Размер должен быть умножен AES_BLOCK_SIZE и больше или равен размеру входных данных.

Вам не нужно резервировать место дляноль и вставьте ноль в конец enc_buffer.Он будет содержать двоичные данные, а не строковые диаграммы, поэтому его нельзя напечатать как cout << enc_buffer.Если вы хотите распечатать его, вы должны подумать, как вывести двоичные данные, возможно, в шестнадцатеричном или в формате base64.

...