[英]AES_128_CBC OpenSSL Decryption
在使用 OpenSSL 實現 AES_128_CBC 時,我得到了一個密鑰、IV 和一些明文/密文對,以查看我的代碼是否正常工作。 目前,當我解密時,我得到了預期的密文結果。 但是,當代碼嘗試將密文解密回明文時,我沒有得到原始明文。 相反,我得到:����S@��3��6��y��y��。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/aes.h>
#define BUFSIZE 1024
/* AES key for Encryption and Decryption */
const static unsigned char aes_key[]= . {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF};
unsigned char iv[] = {0x98,0x76,0x54,0x32,0x10,0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,0xFE,0xDC,0xBA};
unsigned char tmpIv[sizeof(iv)];
/* Print Encrypted and Decrypted data packets */
void print_data(const char *title, const void* data, int len);
int main( ) {
/* Input data to encrypt */
unsigned char aes_input[BUFSIZE] = {0};
strcpy(aes_input, "Testing");
fprintf(stderr, "%s\n", aes_input);
print_data("Init IV: ", iv, sizeof(iv));
/* Init vector */
memcpy(tmpIv, iv, sizeof(iv));
/* Buffers for Encryption and Decryption */
unsigned char enc_out[sizeof(aes_input)];
unsigned char dec_out[sizeof(aes_input)];
unsigned char *e = enc_out;
/* AES-128 bit CBC Encryption */
AES_KEY enc_key, dec_key;
AES_set_encrypt_key(aes_key, sizeof(aes_key)*8, &enc_key);
AES_cbc_encrypt(aes_input, enc_out, strlen(aes_input), &enc_key, iv, AES_ENCRYPT);
fprintf(stderr, "Encrypted:");
while (*e) printf(" [%02x]", *e++);
printf("\n");
/* AES-128 bit CBC Decryption */
memset(tmpIv, 0x00, sizeof(iv));
memcpy(tmpIv, iv, sizeof(iv));
AES_set_decrypt_key(aes_key, sizeof(aes_key)*8, &dec_key);
AES_cbc_encrypt(enc_out, dec_out, strlen(aes_input), &dec_key, tmpIv, AES_DECRYPT);
fprintf(stderr, "The Plaintext After Decryption is: %s\n", dec_out);
return 0;
}
問題是,在aes_cbc_encrypt()
中修改了iv
以進行下一輪加密。
在這里,你用已經修改過的向量覆蓋用於解密的 iv:
/* AES-128 bit CBC Decryption */
memset(tmpIv, 0x00, sizeof(iv));
memcpy(tmpIv, iv, sizeof(iv));
AES_set_decrypt_key(aes_key, sizeof(aes_key)*8, &dec_key);
由於您已經在上面復制了正確的向量
/* Init vector */
memcpy(tmpIv, iv, sizeof(iv));
刪除下面的memset()
/ memcpy()
應該足以獲得正確的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.