C语言:如何加密并解密文件

这是我的话题,但是我在网上找了很久也没找到C语言文件加密的办法,所以想请各位帮我看一看

文件加密
文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作。加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计。
要求:
(1)对文件的字符根据加密算法,实现文件加密。
(2)对操作给出必要的提示。
(3)对存在的file1.txt文件,必须先打开,后读写,最后关闭。加密后的文件放在file2.txt。
(4)解密文件保存在file3.txt中。

供参考:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
void encryption(char* text, int key)//加密
{
    char* ptr = NULL;
    for (ptr = text; *ptr; ptr++) {
        if (isalpha(*ptr))
            isupper(*ptr) ? *ptr = (*ptr - 'A' + key) % 26 + 'A' :
            *ptr = (*ptr - 'a' + key) % 26 + 'a';
    }
    *ptr = '\0';
}
void decrypt(char* text, int key)//解密
{
    char* ptr = NULL;
    for (ptr = text; *ptr; ptr++) {
        if (isalpha(*ptr))
            isupper(*ptr) ? *ptr = (*ptr - 'A' - key + 26) % 26 + 'A' :
            *ptr = (*ptr - 'a' - key + 26) % 26 + 'a';
    }
    *ptr = '\0';
}
void fread_file(char* filename, char* text)
{
    FILE* fp; int i = 0;
    fp = fopen(filename, "r");
    if (fp == NULL) {
        printf("打开的文件不存在!\n");
        exit(0);
    }
    while ((text[i] = fgetc(fp)) != EOF) i++;
    fclose(fp);
}
void write_file(char* filename, char* text)
{
    FILE* fp;
    fp = fopen(filename, "w");
    if (fp == NULL) {
        printf("无法打开文件!\n");
        exit(0);
    }
    fprintf(fp, "%s", text);
    fclose(fp);
}
int main()
{
    int  m, n;
    char text[4096] = { 0 }, ptext[4096] = { 0 };
    printf("读入要加密的明文:");
    fread_file("file1.txt", text);  //gets(text, 4096);
    printf("%s\n", text);

    printf("输入学号:");
    scanf("%d", &m);
    m % 10 == 0 ? n = 10 : n = m % 10;//密钥:以学号尾号为秘钥进行加密(例:尾号为0则秘钥为10)

    encryption(text, n);
    printf("加密后的密文为:%s\n", text);
    write_file("file2.txt", text); //加密后的文件放在file2.txt
    
    fread_file("file2.txt", ptext);
    decrypt(ptext, n);
    printf("解密后的明文为:%s\n", ptext);
    write_file("file3.txt", ptext);//解密文件保存在file3.txt中
    return 0;
}

参照我的博客文章专栏C/C++,里面有几篇数据和文件加密的文章,包含C语言实现的代码。