C语言文件加密解密算法步骤基础

发布时间: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.txt3.txt是相同的。

C语言文件加密解密算法步骤基础

相关推荐