C语言 AES-128-CBC NO PADDING加解密源码
时间: 2024-10-26 20:04:04 浏览: 28
AES(Advanced Encryption Standard)是一种常用的对称加密算法,而CBC(Cipher Block Chaining)模式是其常见的工作模式之一,需要额外填充数据以达到块大小的要求。在C语言中编写AES-128-CBC无 padding 加解密源码是一个复杂的任务,通常会涉及到OpenSSL这样的安全库。
下面是一个简化的示例,展示了如何使用OpenSSL库在C语言中进行AES-128-CBC的加解密操作,但这并不包括实际的NO PADDING部分,因为AES CBC本身就需要处理填充:
```c
#include <openssl/aes.h>
#include <openssl/crypt.h>
// 加密函数
void aes_cbc_encrypt(unsigned char *input, unsigned char *output, size_t len, const unsigned char *key, const unsigned char *iv) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key); // 128位密钥对应AES-128
AES_CFB128_encrypt(input, output, len, &aes_key, iv, AES_ENCRYPT);
}
// 解密函数
void aes_cbc_decrypt(unsigned char *input, unsigned char *output, size_t len, const unsigned char *key, const unsigned char *iv) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 128, &aes_key); // 使用相同的密钥和IV进行解密
AES_CFB128_encrypt(input, output, len, &aes_key, iv, AES_DECRYPT);
}
int main() {
// 实际使用前确保已经初始化OpenSSL库
OpenSSL_add_all_algorithms();
// 示例数据、密钥和初始向量
unsigned char key[AES_BLOCK_SIZE] = {0x00, 0x01, ...}; // 16字节密钥
unsigned char iv[AES_BLOCK_SIZE] = {0x00, 0x01, ...};
unsigned char plaintext[] = "Original message";
unsigned char ciphertext[sizeof(plaintext)];
// 加密
aes_cbc_encrypt(plaintext, ciphertext, strlen(plaintext), key, iv);
// 输出或存储 ciphertext...
// 解密
unsigned char decrypted_text[strlen(ciphertext)];
aes_cbc_decrypt(ciphertext, decrypted_text, strlen(ciphertext), key, iv);
return 0;
}
```
请注意,这个例子仅用于教学目的,实际项目中你需要处理好padding和边界检查等问题。另外,真正的NO PADDING意味着在输入到AES之前不需要添加填充,这通常适用于特定的应用场景,如TLS/SSL协议中的明文记录层。
阅读全文