当前位置:网站首页>C:文件加密
C:文件加密
2022-07-21 10:19:00 【Amos_zh】
主函数:main.c
#include <stdio.h>
#include "fun.h"
int main(int argc, char *argv[])
{
while(1)
{
int cmd = 0;
print_help();
scanf("%d", &cmd);
if(1 == cmd)
{
char src_file[31] = "";
char dst_file[31] = "";
unsigned long file_length = 0;
char *file_data = NULL;
unsigned int passwd;
//1.获取源文件、目的文件名(参考API实现)
get_file_name(dst_file, src_file);
//2.获取源文件对应的文件的内容(参考API实现)
file_data = read_src_file(&file_length, src_file);
printf("%s\n", file_data);
//3.获取用户输入密码(自定义实现)
printf("请输入你的密码:");
scanf("%u", &passwd);
//4.对文件内容进行加密(参考API实现)
file_data = file_text_encrypt(file_data, file_length, passwd);
//5.对加密好的文件内容保存到目的文件中(参考API实现)
save_file(file_data, file_length, dst_file);
}
else if(2 == cmd)
{
char src_file[31] = "";
char dst_file[31] = "";
char *file_data = NULL;
unsigned long file_length = 0;
unsigned int passwd;
//1.获取源文件、目的文件名(参考API实现)
get_file_name(dst_file, src_file);
//2.获取源文件对应的文件的内容(参考API实现)
file_data = read_src_file(&file_length, src_file);
printf("file_data: %s\n", file_data);
//3.获取用户输入密码(自定义实现)
printf("请输入你的密码:");
scanf("%u", &passwd);
//4.对文件内容进行解密(参考API实现)
file_data = file_text_decrypt(file_data, file_length, passwd);
printf("file_data(de): %s\n", file_data);
//5.对加密好的文件内容保存到目的文件中(参考API实现)
save_file(file_data, file_length, dst_file);
}
else if(3 == cmd)
{
break;
}
else
puts("请输入一个正确的选项");
}
}
fun.h头文件
#ifndef __FUN_H__
#define __FUN_H__
//循环打印帮助信息
extern void print_help(void);
//获取源文件和输出文件的名称
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 passwd);//文件加密
extern char * file_text_decrypt(char * src_file_text,unsigned long int length,unsigned int password);//解密字符串
//将加密或者解密之后的内容保存到指定的文件中
extern void save_file(char* text,unsigned long int length,char * file_name);//保存文件
#endif
fun.c文件
#include <stdio.h>
#include <stdlib.h>
//打印帮助信息
void print_help(void)
{
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);
}
char *read_src_file(unsigned long *file_length, char *src_file_name)
{
FILE *fp = NULL;
char *data = NULL;//在其他函数释放
fp = fopen(src_file_name, "r");
if(NULL == fp)
{
perror("fopen");
return NULL;
}
//获取文件长度
// 将文件流指针定位到文件尾部
fseek(fp, 0, 2);
// 获取文件长度
*file_length = ftell(fp);
// printf("%d\n", *file_length);
// 复位文件流指针
rewind(fp);
//根据文件的长度申请堆区空间
data = (char *)calloc(1, *file_length);
if(NULL == data)
{
perror("calloc");
return NULL;
}
//一次性读取文件内容
fread(data, *file_length, 1, fp);
fclose(fp);
return data;
}
char * file_text_encrypt(char *src_file_text, unsigned long int length, unsigned int passwd)
{
int i = 0;
for(i = 0; i < length; i++)
src_file_text[i] += passwd;
return src_file_text;
}
char * file_text_decrypt(char * src_file_text, unsigned long int length, unsigned int passwd)
{
int i = 0;
for(i = 0; i < length; i++)
src_file_text[i] -= passwd;
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(NULL == fp)
{
perror("fopen");
return;
}
fwrite(text, length, 1, fp);
fclose(fp);
#if 1
if(text != NULL)
{
free(text);
text = NULL;
}
#endif
printf("保存成功!\n");
}
边栏推荐
- Interpretation of openmmlab series framework (based on pytorch)
- 收藏版|史上最全机器学习优化器Optimizer汇总
- Don't know a little statistics, "Star Wars" for nothing
- Mobilevit: challenge the end-to-side overlord of mobilenet
- 简单总结一下图像处理中概念
- 云原生 SIG 直播:关于 cni 与 hybridnet 核心技术分享 | 第 35 期
- 2022全球开发者薪资曝光:中国排第19名,平均年薪23,790美元
- Codeforces round 578 (Div. 2) B - block adventure [greed]
- Pytorch implementation of packet convolution depth separable convolution
- 博物馆数字化——数字藏品app开发
猜你喜欢
Doctor application | the City University of Hong Kong's Liu Chen teacher group recruits doctors / postgraduates / Masters /ra
虚拟机win7系统安装vmtool
Quartz simple usage and its es job
生成数字图像基本过程
pytorch实现 分组卷积 深度可分离卷积
quartz簡單用法及其es-job
Introduction to pytorch II use pyplot to dynamically show the function fitting process
quartz简单用法及其es-job
Bootloader series 3 - core initialization
网页监控----Mjpg‐streamer移植
随机推荐
网页监控----Mjpg‐streamer移植
Bootloader Series II -- ARM920T -- bootloader architecture design
Force buckle 1260 2D mesh migration
bootloader系列四——时钟初始化
This price is fragrant enough! Lingyao 142022 shadow cyan glaze spike: 12th generation core +2.8k OLED screen
Unity2D~对周目解密小游戏练习(三天完成)
The efficiency principle that ISR should follow
Li Hongyi's deep learning course notes convolutional neural network
pyorch 通过前三个数预测后一个数的模型代码demo
即刻报名|如何降低云上数据分析成本?
Detailed explanation of depthwise separable revolution
Text detection - traditional
2019 Niuke summer multi school training camp (the seventh session) b-ireducible polynomial [number theory]
quartz簡單用法及其es-job
Alberl duilib入门及进阶教程
生成数字图像基本过程
Utilisation simple de quartz et de ses emplois
完美+今日头条笔试题+知识点总结
【论文笔记】Modeling Task Relationships in Multi-task Learning withMulti-gate Mixture-of-Experts
工作流引擎在vivo营销自动化中的应用实践 | 引擎篇03