openssl AES加密、解密
关于加密解密后长度的说明
AES(高级加密标准)是一种对称加密算法,它使用相同的密钥进行加密和解密操作。无论是加密还是解密,输入和输出的字节数保持一致。
AES算法操作的数据以字节为单位。输入数据被分成16字节的块,并且每个块独立地进行加密或解密。加密和解密的过程都是基于16字节块的,因此无论是加密还是解密操作,其输出的字节数与输入的字节数相同。
需要注意的是,如果输入数据的长度不是16字节的整数倍,通常会进行填充操作以满足要求,这可能会导致输出的字节数略有不同。但在进行解密操作时,解密算法会自动移除填充字节,还原出与原始输入相同的字节数。
#include <openssl/aes.h>
#include <string.h>
#include <iostream>
int main()
{
unsigned char key[] = "12345678";
const int BITS = 128;
unsigned char plaintext[] = "0123456789abcdef";
std::cout << "明文:\n" << plaintext << std::endl;
/* 加密 */
AES_KEY aes_key_en;
unsigned char ciphertext[17] = {'\0'};
AES_set_encrypt_key(key, BITS, &aes_key_en);
AES_encrypt(plaintext, ciphertext, &aes_key_en);
std::cout << "加密:\n";std::cout << ciphertext << std::endl;
/* 解密 */
AES_KEY aes_key_de;
unsigned char plaintext1[17] = {'\0'};
AES_set_decrypt_key(key, BITS, &aes_key_de);
AES_decrypt(ciphertext , plaintext1, &aes_key_de);
std::cout << "解密:\n" << plaintext1 << std::endl;
return 0;
}