c语言调用openssl进行aes加解密
时间: 2024-07-31 13:01:48 浏览: 44
在C语言中,要使用OpenSSL库进行AES(高级加密标准)加解密,你需要包含相关的头文件,并引入OpenSSL函数。以下是一个简单的示例,展示如何使用AES-CBC模式进行加密和解密:
首先,确保已经安装了OpenSSL库,并链接到你的项目中。
```c
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
// 加密函数
void aes_encrypt(const char *plaintext, char *ciphertext, const AES_KEY *key, const unsigned char iv[AES_BLOCK_SIZE]) {
AES_encrypt((unsigned char *) plaintext, (unsigned char *) ciphertext, key, iv);
}
// 解密函数
void aes_decrypt(const char *ciphertext, char *plaintext, const AES_KEY *key, const unsigned char iv[AES_BLOCK_SIZE]) {
AES_decrypt((unsigned char *) ciphertext, (unsigned char *) plaintext, key, iv);
}
int main() {
const char *key = "0123456789012345"; // 16字节的密钥
unsigned char iv[AES_BLOCK_SIZE] = {0}; // 初始化向量
// 加密示例
char input[] = "Hello, World!";
char output[EVP_MAX_CIPHER_LENGTH];
AES_KEY aes_key;
AES_set_encrypt_key((unsigned char *) key, 128, &aes_key); // AES-128
memset(output, 0, sizeof(output));
aes_encrypt(input, output, &aes_key, iv);
printf("Encrypted: %s\n", output);
// 解密示例
memset(output, 0, sizeof(output));
AES_set_decrypt_key((unsigned char *) key, 128, &aes_key);
aes_decrypt(output, input, &aes_key, iv);
printf("Decrypted: %s\n", input);
return 0;
}
```
注意:
1. 上述代码仅作演示用途,实际应用中需要处理错误处理和输入长度校验。
2. OpenSSL提供了一个封装好的EVP系列API,更推荐使用`EVP_EncryptInit` 和 `EVP_DecryptInit` 进行操作,它们更为安全和便捷。