C语言文件加密解密:AES算法源码示例及详细解析
以下是一个使用AES算法对文件进行加密和解密的C语言源码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/aes.h>
// 加密函数
void encryptFile(const char* inputFile, const char* outputFile, const char* key) {
FILE* fin = fopen(inputFile, 'rb');
FILE* fout = fopen(outputFile, 'wb');
unsigned char iv[AES_BLOCK_SIZE];
memset(iv, 0x00, AES_BLOCK_SIZE);
AES_KEY aesKey;
AES_set_encrypt_key((unsigned char*)key, 128, &aesKey);
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
while (fread(indata, 1, AES_BLOCK_SIZE, fin) > 0) {
AES_cbc_encrypt(indata, outdata, AES_BLOCK_SIZE, &aesKey, iv, AES_ENCRYPT);
fwrite(outdata, 1, AES_BLOCK_SIZE, fout);
}
fclose(fin);
fclose(fout);
}
// 解密函数
void decryptFile(const char* inputFile, const char* outputFile, const char* key) {
FILE* fin = fopen(inputFile, 'rb');
FILE* fout = fopen(outputFile, 'wb');
unsigned char iv[AES_BLOCK_SIZE];
memset(iv, 0x00, AES_BLOCK_SIZE);
AES_KEY aesKey;
AES_set_decrypt_key((unsigned char*)key, 128, &aesKey);
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
while (fread(indata, 1, AES_BLOCK_SIZE, fin) > 0) {
AES_cbc_encrypt(indata, outdata, AES_BLOCK_SIZE, &aesKey, iv, AES_DECRYPT);
fwrite(outdata, 1, AES_BLOCK_SIZE, fout);
}
fclose(fin);
fclose(fout);
}
int main() {
// 输入文件路径和密钥
const char* inputFile = 'input.txt';
const char* encryptedFile = 'encrypted.bin';
const char* decryptedFile = 'decrypted.txt';
const char* key = 'ThisIsASecretKey';
// 加密文件
encryptFile(inputFile, encryptedFile, key);
printf('File encrypted successfully.\n');
// 解密文件
decryptFile(encryptedFile, decryptedFile, key);
printf('File decrypted successfully.\n');
return 0;
}
请注意,此示例使用了OpenSSL库中的AES算法函数。在编译时,需要链接OpenSSL库,可以使用以下命令进行编译:
gcc -o fileEncryptDecrypt fileEncryptDecrypt.c -lssl -lcrypto
该示例中的input.txt文件将被加密,并生成一个名为encrypted.bin的加密文件。然后,使用相同的密钥对加密文件进行解密,并将解密后的数据保存在decrypted.txt中。请根据实际需要修改文件路径和密钥。
原文地址: https://www.cveoy.top/t/topic/paBN 著作权归作者所有。请勿转载和采集!