aes加密文件c语言
时间: 2024-06-01 17:05:29 浏览: 119
基于C语言的aes加密算法
5星 · 资源好评率100%
AES(Advanced Encryption Standard)是一种常用的对称加密算法,它可以对数据进行加密和解密,保护数据的安全性。在C语言中,可以使用OpenSSL库中的函数来实现AES加密和解密。
以下是AES加密文件的大致步骤:
1. 打开需要加密的文件,读取文件内容;
2. 使用AES算法加密数据;
3. 将加密后的数据写入新的文件中。
在C语言中,可以使用OpenSSL库中的函数来实现AES加密和解密。首先需要使用OpenSSL库中的函数进行初始化,然后通过调用函数进行加密或解密。以下是一个简单的示例代码,用于AES加密文件:
```c
#include <openssl/aes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define AES_BLOCK_SIZE 16
void encrypt(FILE *ifp, FILE *ofp, unsigned char *key, unsigned char *iv) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key);
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
int num = 0;
while (fread(indata, 1, AES_BLOCK_SIZE, ifp) == AES_BLOCK_SIZE) {
AES_cbc_encrypt(indata, outdata, AES_BLOCK_SIZE, &aes_key, iv, AES_ENCRYPT);
fwrite(outdata, 1, AES_BLOCK_SIZE, ofp);
num++;
}
if (num == 0) {
printf("Error: the file is empty.\n");
exit(1);
}
if (fread(indata, 1, AES_BLOCK_SIZE, ifp) != 0) {
memset(indata + strlen(indata), AES_BLOCK_SIZE - strlen(indata), AES_BLOCK_SIZE - strlen(indata));
AES_cbc_encrypt(indata, outdata, AES_BLOCK_SIZE, &aes_key, iv, AES_ENCRYPT);
fwrite(outdata, 1, AES_BLOCK_SIZE, ofp);
}
}
int main() {
char *infilename = "input.txt";
char *outfilename = "output.txt";
unsigned char key[] = "0123456789abcdef";
unsigned char iv[] = "0123456789abcdef";
FILE *ifp = fopen(infilename, "rb");
FILE *ofp = fopen(outfilename, "wb");
encrypt(ifp, ofp, key, iv);
fclose(ifp);
fclose(ofp);
}
```
阅读全文