Loading... # 文件加密器 原理: * 加密原理![](https://blog.fivk.cn/usr/uploads/2021/02/82471042.png) * 解密原理![](https://blog.fivk.cn/usr/uploads/2021/02/1967983058.png) * 我们先创建一个文本文件,取名为a.txt ![](https://blog.fivk.cn/usr/uploads/2021/02/1007694399.png) 。。。。。 不更新了,直接去看b站千峰C语言视频把。。 * mian.c ```C #include<stdio.h> #include "fun.h" int main(int argc, char* argv[]) { int cmd = 0; printf_help(); while (cmd != 3) { // printf_help(); scanf("%d", &cmd); if (cmd == 1) { char src_file[31] = ""; char dst_file[31] = ""; char* file_data = NULL; unsigned long file_length = 0; unsigned int passwd = 0; //1.获取源文件 目的文件名(参考API实现) //void get_file_name(char * dest_file_name, char * src_file_name) get_file_name(dst_file,src_file); //2.获取源文件名 对应的 文件 内容 //char * read_src_file(unsigned long *file_length, char *src_file_name) file_data = read_src_file(&file_length, src_file); //3.获取用户输入密码(自定义实现) printf("请输入你的密码:"); scanf("%u", &passwd); //4.对文件内容加密(参考API实现) //char * file_text_encrypt(char * src_file_text,unsigned long int length, unsigned int password) file_data = file_text_encrypt(file_data, file_length, passwd); //5.对加密好的文件内容保存到目的文件中(参考API实现) //void save_file(char* text, unsigned long int length, char * file_name) save_file(file_data, file_length, dst_file); } else if (cmd == 2) { char src_file[31] = ""; char dst_file[31] = ""; char* file_data = NULL; unsigned long file_length = 0; unsigned int passwd = 0; //1.获取源文件 目的文件名(参考API实现) //void get_file_name(char * dest_file_name, char_name, char * stc_file_name) get_file_name(dst_file, src_file); //2.获取源文件名对应的文件内容 file_data = read_src_file(&file_length, src_file); //3.获取用户输入密码(自定义实现) printf("请输入你的密码:"); scanf("%u", &passwd); //4.对文件内容解密(参考API实现) //char * file_text_decrypt(char * src_file_text,unsigned long int length, unsigned int password) file_data = file_text_decrypt(file_data, file_length, passwd); //5.对加密好的文件内容保存到目的文件中(参考API实现) //void save_file(char* test, unsigned long int length, char * file name) save_file(file_data, file_length, dst_file); } else if (cmd == 3) { printf("欢迎使用文本加密器。\n©Fivk.梦一帆。"); break; } else { printf("请输入一个正确的选项\n"); } } return 0; } ``` * fun.c ```C #include<stdio.h> #include<stdlib.h> void printf_help() { printf("********1.加密文件********\n"); printf("********2.解密文件********\n"); printf("********3.退出程序********\n"); } //获取文件名 void get_file_name(char* dest_file_name, char* src_file_name) { printf("请输入你的原文件名称(不大于30个字符):"); scanf("%s", src_file_name); printf("请输入你的目的件名称(不大于30个字符):"); scanf("%s", dest_file_name); return; } //获取文件内容 char* read_src_file(unsigned long* file_length, char* src_file_name) { char* data = NULL; FILE* fp = NULL; fp = fopen(src_file_name, "r"); if (fp == NULL) { perror("fopen"); return NULL; } //获取文件总长度 //1.将文件流指针 定位 到文件尾部 fseek(fp, 0, 2); //2.获取文件长度 *file_length = ftell(fp); //3.复位文件流指针 rewind(fp); //根据 文件的长度 申请 堆区空间 data = (char*)calloc(1, *file_length+1); if (data == NULL) { perror("calloc"); return NULL; } //一次性 读取文件内容 fread(data, *file_length, 1, fp); return data; } //加密文件 char* file_text_encrypt(char* src_file_text, unsigned long int length, unsigned int password) { int i = 0; for (i = 0; i < length; i++) { src_file_text[i] += password;//加密的过程 } return src_file_text; } //解密文件 char* file_text_decrypt(char* src_file_text, unsigned long int length, unsigned int password) { int i = 0; for (i = 0; i < length; i++) { src_file_text[i] -= password;//加密的过程 } return src_file_text; } //保存文件 void save_file(char* text, unsigned long int length, char* file_name) { FILE* fp = NULL; fp = fopen(file_name, "w"); if (fp == NULL) { perror("fopen"); return; } fwrite(text, length, 1, fp); //将data 保存到 文件中 fclose(fp); //释放text指向的堆区空间 if (text != NULL) { free(text); text == NULL; } printf("保存成功!\n"); } ``` * fun.h ```C #pragma once extern void printf_help(); extern void get_file_name(char* dest_file_name, char* src_file_name); extern char* read_src_file(unsigned long* file_length, char* src_file_name); extern char* file_text_encrypt(char* src_file_text, unsigned long int length, unsigned int password); extern void save_file(char* text, unsigned long int length, char* file_name); extern char* file_text_decrypt(char* src_file_text, unsigned long int length, unsigned int password); ``` 最后修改:2021 年 03 月 01 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏