C语言文件加密解密:AES算法实现及命令行操作
在C语言中,可以使用密码学算法来加密和解密任何格式的文件。以下是一个使用AES算法来加密和解密文件的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/aes.h>
void encrypt_file(const char* input_file, const char* output_file, const char* key) {
FILE* fin = fopen(input_file, "rb");
FILE* fout = fopen(output_file, "wb");
unsigned char iv[AES_BLOCK_SIZE];
memset(iv, 0x00, sizeof(iv));
AES_KEY aes_key;
AES_set_encrypt_key((unsigned char*)key, 128, &aes_key);
unsigned char input[AES_BLOCK_SIZE];
unsigned char output[AES_BLOCK_SIZE];
size_t bytes_read;
while ((bytes_read = fread(input, 1, sizeof(input), fin)) > 0) {
AES_cfb128_encrypt(input, output, bytes_read, &aes_key, iv, NULL, AES_ENCRYPT);
fwrite(output, 1, bytes_read, fout);
}
fclose(fin);
fclose(fout);
}
void decrypt_file(const char* input_file, const char* output_file, const char* key) {
FILE* fin = fopen(input_file, "rb");
FILE* fout = fopen(output_file, "wb");
unsigned char iv[AES_BLOCK_SIZE];
memset(iv, 0x00, sizeof(iv));
AES_KEY aes_key;
AES_set_decrypt_key((unsigned char*)key, 128, &aes_key);
unsigned char input[AES_BLOCK_SIZE];
unsigned char output[AES_BLOCK_SIZE];
size_t bytes_read;
while ((bytes_read = fread(input, 1, sizeof(input), fin)) > 0) {
AES_cfb128_encrypt(input, output, bytes_read, &aes_key, iv, NULL, AES_DECRYPT);
fwrite(output, 1, bytes_read, fout);
}
fclose(fin);
fclose(fout);
}
int main(int argc, char* argv[]) {
if (argc != 5) {
printf("Usage: %s [encrypt|decrypt] [input_file] [output_file] [key]
", argv[0]);
return 1;
}
const char* mode = argv[1];
const char* input_file = argv[2];
const char* output_file = argv[3];
const char* key = argv[4];
if (strcmp(mode, "encrypt") == 0) {
encrypt_file(input_file, output_file, key);
printf("File encrypted successfully.
");
} else if (strcmp(mode, "decrypt") == 0) {
decrypt_file(input_file, output_file, key);
printf("File decrypted successfully.
");
} else {
printf("Invalid mode. Please choose either 'encrypt' or 'decrypt'.
");
return 1;
}
return 0;
}
要编译和运行上述代码,您需要安装OpenSSL库。可以使用以下命令来编译代码:
gcc -o file_encrypt_decrypt file_encrypt_decrypt.c -lcrypto
然后,您可以使用以下命令来加密和解密文件:
./file_encrypt_decrypt encrypt input_file output_file key
./file_encrypt_decrypt decrypt input_file output_file key
其中,input_file是要加密或解密的输入文件的路径,output_file是生成的加密或解密后的输出文件的路径,key是用于加密或解密的密钥。请确保输入文件存在,并且输出文件不存在或为空。
原文地址: https://www.cveoy.top/t/topic/paBY 著作权归作者所有。请勿转载和采集!