以下是一个使用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中。请根据实际需要修改文件路径和密钥。

C语言文件加密解密:AES算法源码示例及详细解析

原文地址: https://www.cveoy.top/t/topic/paBN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录