实现效果界面如图:
目的:对a文件的内容进行加密,生成加密后的b文件;
若要解密时,生成解密后的c文件。
源文件(未加密前)
目的文件(加密后):对文件内容加密,详细情况见fun.c函数加密。
目的文件(解密后):输入密码正确,生成保存新的c文件。
main.c
#include<stdio.h>
#include"fun.h"
#include"fun.c"
int main(int argc,char *argv[])
{
while(1)
{
int cmd=0;
print_help();
scanf("%d",&cmd);
if(cmd==1)
{
char src_file[31]="";
char dest_file[31]="";
char *file_data=NULL;
unsigned long file_length=0;
unsigned int passwd=0;
//1、获取源文件 目的文件名(参考API实现)
get_file_name(dest_file,src_file);
//2、获取源文件名 对应的文件 内容(参考API实现)
file_data=read_src_file(&file_length,src_file);
//3、获取用户输入的密码(自定义实现)
printf("请输入你的密码:");
scanf("%u",&passwd);
//4、对文件内容加密(参考API实现)
file_data=file_text_encrypt(file_data,file_length,passwd);
//5、对加密好的 文件内容 保存到 目的文件名中
save_file(file_data,file_length,dest_file);
}
else if(cmd==2)
{
char src_file[31]="";
char dest_file[31]="";
char *file_data=NULL;
unsigned long file_length=0;
unsigned int passwd=0;
//1、获取源文件 目的文件名(参考API实现)
get_file_name(dest_file,src_file);
//2、获取源文件名 对应的文件 内容(参考API实现)
file_data=read_src_file(&file_length,src_file);
//3、获取用户输入的密码(自定义实现)
printf("请输入你的密码:");
scanf("%u",&passwd);
//4、对文件内容加密(参考API实现)
file_data=file_text_decrypt(file_data,file_length,passwd);
//5、对加密好的 文件内容 保存到 目的文件名中
save_file(file_data,file_length,dest_file);
//void save_file(char* text,unsigned long int length,char * file_name)
}
else if(cmd==3)
{
printf("程序已退出.");
break;
}
else
{
printf("请输入一个正确的选项.\n");
}
}
return 0;
}
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)
{
char *data=NULL;
FILE *fp=NULL;
fp=fopen(src_file_name,"r");
if(fp==NULL)
{
perror("fopen");
return NULL;
}
fseek(fp,0,2);
*file_length=ftell(fp);
rewind(fp);
data=(char *)calloc(1,*file_length);
if(data==NULL)
{
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 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);
fclose(fp);
if(text!=NULL)
{
free(text);
text=NULL;
}
printf("保存成功.\n");
}
//解密函数
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;
}
fun.h
#ifndef __FUN_H__
#define __FUN_H__
extern void print_help(void);
extern void get_file_name(char * dest_file_name,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);
#endif