在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 著作权归作者所有。请勿转载和采集!

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