linux C/C++ AES 加解密
时间: 2024-09-15 21:07:40 浏览: 36
AES (Advanced Encryption Standard) 是一种广泛使用的块密码算法,用于对数据进行加密和解密。在Linux环境下使用C/C++进行AES加解密,通常会依赖于一些开源库,比如 OpenSSL、Crypto++ 或者 libgcrypt。
1. 使用OpenSSL:
OpenSSL 提供了丰富的加密支持,包括AES。你可以通过`openssl_encrypt()`函数进行加密,`openssl_decrypt()`函数进行解密。需要包含头文件`<openssl/aes.h>`,并初始化AES上下文(`AES_KEY`)。
```c
#include <openssl/aes.h>
// 初始化AES key
AES_KEY aes_key;
// 加密示例:
int encrypt(const unsigned char* plaintext, size_t plaintext_len,
unsigned char* ciphertext, const AES_KEY* key) {
AES_encrypt(plaintext, ciphertext, key);
// ...处理输出长度和填充...
}
// 解密示例:
int decrypt(const unsigned char* ciphertext, size_t ciphertext_len,
unsigned char* plaintext, const AES_KEY* key) {
AES_decrypt(ciphertext, plaintext, key);
// ...处理填充和输出长度...
}
```
2. 使用libgcrypt:
libgcrypt同样提供了AES功能。你需要链接相应的库,如`-lgcrypt`。加密和解密过程类似,但API稍有差异:
```c
#include <gcrypt.h>
// 初始化AES key
unsigned char aes_key[AES_BLOCK_SIZE];
// 加密示例:
void gencrypt(unsigned char *ciphertext, const unsigned char *plaintext,
const unsigned char *key) {
gpg_error_t error = GPG_ERR_NO_ERROR;
gpg_ctx_t ctx;
if (!gpg_ctx_init(&ctx)) {
error = gpg_err_code();
// 错误处理...
}
// 使用gpg_cipher_encrypt进行加密
error = gpg_cipher_encrypt(&ctx, ciphertext, plaintext, key);
gpg_ctx_clear(&ctx);
if (error != GPG_ERR_NO_ERROR) {
// 错误处理...
}
}
// 解密示例:
void gdecrypt(unsigned char *plaintext, const unsigned char *ciphertext,
const unsigned char *key) {
gpg_error_t error = GPG_ERR_NO_ERROR;
gpg_ctx_t ctx;
if (!gpg_ctx_init(&ctx)) {
error = gpg_err_code();
// 错误处理...
}
// 使用gpg_cipher_decrypt进行解密
error = gpg_cipher_decrypt(&ctx, plaintext, ciphertext, key);
gpg_ctx_clear(&ctx);
if (error != GPG_ERR_NO_ERROR) {
// 错误处理...
}
}
```
阅读全文