跳到主要内容

AES-256-ECB 加密

用 pkcs7 填充

#include <openssl/aes.h>

// PKCS7 填充
int pkcs7_padding(const unsigned char *input, int input_len, unsigned char *output, int block_size)
{
int pad_len = block_size - (input_len % block_size); // 计算填充值长度
memcpy(output, input, input_len); // 拷贝原始数据
for (int i = input_len; i < input_len + pad_len; i++)
{
output[i] = (unsigned char)pad_len; // 填充值为 pad_len
}
return input_len + pad_len; // 返回填充后的总长度
}

// AES-256-ECB 加密
int aes_256_ecb_encrypt(const unsigned char *plaintext, int plaintext_len,
const unsigned char *key, unsigned char *ciphertext)
{
AES_KEY encrypt_key; // AES 密钥结构
unsigned char input_padded[128] = {0}; // 缓冲区,存储填充后的明文
int padded_len;

// 1. 设置 AES 256 位加密密钥
if (AES_set_encrypt_key(key, 256, &encrypt_key) < 0)
{
printf("Failed to set encryption key\n");
return -1;
}

// 2. 执行 PKCS7 填充(传入数据长度非 16 的倍数时,会进行填充对齐)
padded_len = pkcs7_padding(plaintext, plaintext_len, input_padded, AES_BLOCK_SIZE);

// 3. 执行 AES-ECB 加密,16 字节为一块
for (int i = 0; i < padded_len; i += AES_BLOCK_SIZE)
{
AES_encrypt(input_padded + i, ciphertext + i, &encrypt_key);
}

return padded_len; // 返回密文的长度
}