C语言文件加密解密算法步骤基础
发布时间:2018-07-01 10:38:54
发布时间:2018-07-01 10:38:54
【任务描述】
对于硬盘上面某一文件进行加密与解密。
要求:1、程序运行时,要有提示,选择输入字母来确定对文件进行何种操作,比如输入字母“E”代表进行加密运算,输入字母“D”代表进行解密运算,字母“Q”代表退出。
2、文件加密,生成新的文件。移位加密、伪随机数加密、命令加密等。
3、对加密后文件的还原。
4、加密解密后文件的保存。
【主要算法设计】
计算文件的长度,在源文件ASC码上增加或减去一定的值来实现加密解密。
【程序流程框图】
【详细设计】
#include "stdio.h"38
void encryption(char buffer[],int file_size,int key);
void decryption(char buffer[],int file_size,int key);
void Process(int a);
int openSrcFile(char **buffer);
void saveDstFile(char *buffer,int file_size);
void menu();
main()
{
char flag;
menu();
flag = getchar();
getchar();
while(flag != 'Q')
{
switch(flag)
{
case 'E':Process(0);break;
case 'D':Process(1);break;
default:printf("错误输入!\n");break;
}
flag = getchar();
getchar();
}
}
void menu()
{
printf(" \n 进行加密运算输入 'E' 进行解密运算输入 'D' 退出输入'Q' \n" );
}
int openSrcFile(char **buffer)
{
FILE *myfile_src; /*源文件指针*/
char filename[20]; /*文件名数组*/
long file_size; /*记录文件的长度*/
printf("请输入文件要储存路径和文件名\n");
scanf("%s",filename);
if(!(myfile_src = fopen(filename,"rb")))
{
printf("错误!");
}
fseek(myfile_src,0,SEEK_END);//判断文件长度
file_size = ftell(myfile_src);
fseek(myfile_src,0,SEEK_SET);
*buffer = (char *)malloc(file_size);
fread(*buffer,1,file_size,myfile_src); /*读入文件*/
fclose(myfile_src);
return file_size;
}
void saveDstFile(char *buffer,int file_size)//储存文件
{
FILE *myfile_dst; /*源文件指针*/
char filename[20]; /*文件名数组*/
printf("请输入您所处理的文件的路径和文件名\n");
scanf("%s",filename);
if(!(myfile_dst = fopen(filename,"wb")))
{
printf("错误!");
}
fwrite(buffer,1,file_size,myfile_dst);
printf("OK");
fclose(myfile_dst);
}
void Process(int a)//用key给文件加密、解密
{
FILE *myfile_dst;
char * buffer;
int key;
long file_size; /*记录文本的长度*/
file_size = openSrcFile(&buffer); /*读入源文件*/
printf("请输入数字key进行加密或解密\n");
scanf("%d",&key); /*输入key*/
if(a == 0)
{
/*加密状态*/
encryption(buffer,file_size,key);
}
else
{
/*解密状态*/
decryption(buffer,file_size,key);
}
saveDstFile(buffer,file_size);
}
void encryption(char buffer[],int file_size,int key)//加密
{
int i;
for( i = 0; i < file_size; i++)
buffer[i] = buffer[i] + key; /* 加密文件 */
}
void decryption(char buffer[],int file_size,int key)//解密
{
int i;
for( i = 0; i < file_size; i++)/* 解密文件 */
buffer[i] = buffer[i] - key;
}
【测试用例】
在E盘建立一个1.txt进行加密,密码为10,输出文件为2.txt
对2.txt进行解密,密码为10,输出结果为3.txt
【调试运行结果】
会发现1.txt与3.txt是相同的。