文件的加密解密.docx
《文件的加密解密.docx》由会员分享,可在线阅读,更多相关《文件的加密解密.docx(19页珍藏版)》请在冰豆网上搜索。
文件的加密解密
学年设计报告
设计题目文件的加密解密
作者姓名陈中亚
所学专业计算机科学与技术专业
指导教师戴支祥
2011年9月1日
学年设计任务书
学年设计题目
文件的加密解密
组长
陈中亚
学号
2010211074
班级
2010级1班
组别
三
专业
计算机科学与技术专业
组员
祖杰2010211154冯婷婷2010211083杨光2010211133
郭影2010211088章丽秀2010211149
指导教师
戴支祥
学年设计目的
1.加强我们编写程序的能力;
2.熟练的掌握C语言知识;
3.熟练掌握文件的基本操作;
4.为毕业设计打下基础。
学年设计所需环境
WindowsXP,VC6.0
学年设计任务要求
1.巩固运用C语言编程的能力;
2.掌握运用C语言对文件进行加密操作;
3.掌握C语言对文件进行解密操作;
4.提高我们编写复杂程序的能力。
学年设计工作进度计划
序号
起止日期
工作内容
分工情况
1
8.23--8.24
召开小组会议,根据的小组成员的特长进行分组和商讨文件的加密方法;
小组的集体成员发表自己的看法,互相讨论
2
8.24—8.25
查找资料,确定程序的主要思路;
陈中亚等负责确定程序的思路,祖杰等负责查找资料
3
8.25—8.29
书写代码和文本文档
祖杰冯婷婷负责书写文档,陈中亚郭影负责书写代码
4
8.30--8.31
测试程序,修改代码,设计工作界面
杨光与章丽秀负责调试程序查找错误,设计工作界面
5
9.1—9.2
进行答辩,修改文档,演示程序的效果
小组的各位成员进行答辩,根据老师要求进行文档的修改,并上交文档。
指导教师签字:
年月日
教研室审核意见:
教研室主任签字:
年月日
目录
摘要1
Abstract1
1绪论1
1.1研究背景1
1.2主要工作1
1.3本文结构1
2相关知识1
2.1文件的加密解密1
3设计2
3.1设计思路2
3.2设计流程图2
3.3设计重点3
3.4界面设计3
4实现3
4.1功能模块3
5测试与优化4
5.1测试4
5.2优化4
6结果展示5
6.1加密操作5
6.2解密操作6
7结束语7
参考文献8
附录9
致谢13
文件的加密解密
摘要:
随着社会的进步,人们的安全意识不断提高,文件的加密保护就显得非常重要,在现实生活中有许多的加密方式,这次加密我们选择对称加密解密,通过读取文件的内容然后进行移位操作进行加密,解密则刚好相反,向相反的方向移动位置,进行解密。
Abstract:
Withtheimprovingofsocial,people'ssafetyconsciousnessenhancesunceasingly.
It’simportantforthesafeofsecretstolearnhowtoencrypt.Ifabtainingthisskill,wecangetridofthepuzzleofcautions,andoursecretsaremoresafe.Encryptingnotonlyguaranteeourpropertysafety,butalsopromotetheimprovingofscienceandtechnology.
关键字:
文件;加密;解密
1绪论
1.1研究背景
随着社会的发展,人们把隐私保护和安全的设置看得越来越重要,其中文件的加密、解密就是一种最简单而有效的保护方式,它在我们的日常生活中扮演着重要的角色,这次我们小组将编写软件对文件进行简单的加密解密。
。
1.2主要工作
我们小组首先进行分工,分别负责书写代码和文档,还有负责查找资料和调试程序,各位成员之间共同合作,然后商量加密的方法,书写代码,测试组对程序进行测试,编写文档的小组同时开展工作,努力的完成这次学年设计。
1.3本文结构
本文第一部分主要以绪论为主,说明了文章的研究背景、主要工作和实现方法。
第二部分主要是文件加密解密的相关知识的介绍。
第三部分叙述了设计的思路、重点以及设计优化。
第四部分介绍的是功能模块的实现,对于文件加密解密来说,主要分加密功能和解密功能。
第五部分就是对程序的测试和优化,这是非常重要的环节,关系到程序的严谨度,可以使程序更加的完善。
第六部分为结果展示,将我们的劳动成果通过操作展现给大家看。
第七部分是结束语,附录是我们的程序代码,最后致谢词结束。
2相关知识
2.1文件的加密解密
现在主要有两种加密方式,一种是对称加密另一种是非对称加密;对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA);不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥,使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。
广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA,
3设计
3.1设计思路
加密的时候:
运用C语言知识,将所遇到的字符进行移位操作。
解密的时候:
根据加密的方法,反过来解密,即将加密字符进行逆向移位操作。
学会运用文件,对任意文件进行加密解密操作,先打开文件判断文件是否为空,为空则给出提示,不为空就对文件进行加密解密操作,还要将文件显示出来,最后关闭文件。
3.2设计流程图
图3-1文件的加密解密流程图
3.3设计重点
对于我们需要用到的文件,每次都需要打开和关闭。
首先要创建一个文件夹,打开时会判断文件夹是否为空。
在写加密函数的时候,主要会用到下面的操作:
do{
ch=fgetc(fp);
a[i]=ch;
a[i]=a[i]+1;
i=i+1;
}while(!
feof(fp));
在写解密函数的时候,主要会用到下面的操作:
do{
ch=fgetc(fp);
a[i]=ch;
a[i]=a[i]-1;
i=i+1;
}while(!
feof(fp));
3.4界面设计
为了让我们的设计更加的完美,一些提示信息是必不可少的,菜单必须简单明了,这样会让使用者感觉更加的方便。
例如:
************************************
简单文件加解密程序
************************************
1表示需要加密
2表示解密
请输入你所要选择的方式:
通过这个界面,可以提示使用者,该如何使用我们的程序,这样就增加了程序的易用性。
4实现
4.1功能模块
⑴加密voidjiami(FILE*fp)
首先打开一个文件读出文件中的内容,存入数组中,然后进行移位操作,对其进行加密,再装入另一个文件中,则加密操作完成,其中我们用到了feof函数对文件是否结束进行判断[1],在运用getc和putc函数对文件进行输出和输入。
⑵解密voidjiemi(FILE*fp)
打开一个需要解密的文件,然后用feof函数判断文件是否结束,再用getc函数从中得出文件中的内容[1],进行字符的移位操作进行解密,再用putc函数把字符输入到新建的文件中,则解密成功。
5测试与优化
5.1测试
⑴可执行性:
程序在刚写好的时候,里面未免会有一系列的错误,包括逻辑错误、语句错误及粗心引起的标点的错误等。
在测试中,通过多次的测试来找出其中的错误所在,并修改。
⑵可用性:
本次设计的主要目标是实现文件的简单加解密,所以它的最后的可用应是源文件与最后文件之间有了一定的加密程序,使别人见了而不理解。
在本块中,要通过运行程序寻找原文与目标文件之间的关系是否与设计的相同,如果不同,通过调试、修改达到最后的目标。
⑶人机界面:
程序是面向使用者的,在人机界面中一定要保证其友好,所以在这一块,要通过多次的调试来完善人机界面的友好
5.2优化
操作界面是程序优良的另一个体现,它要便于操作人员观看和操作。
在程序书写的初期,主要是顾及到程序的可应用性,而没有考虑到界面的优化。
在设计初期,显示界面的代码为:
printf("\n1表示需要加密,2表示解密");
printf("请输入你所要选择的方式");
scanf("%d",&s);
printf("请输入需要加密或解密文件的地址");
scanf("%s",d);
运行时的效果如图5-1所示。
经过一定的修改,最后的界面代码为:
printf("\n\t\t***************************************************");
printf("\n\n\t\t\t\t简单文件加解密程序\n");
printf("\n\t\t***************************************************");
printf("\n\n\n\t\t1表示需要加密\n\n\t\t2表示解密");
printf("\n\n\n\t\t请输入你所要选择的方式");
scanf("%d",&s);
prntf("\n\n\n\t\t请输入需要加密文件的地址");
scanf("%s",d);
运行时的效果如图5-2所示。
在界面优化的过程中,要考虑到界面的排版。
在哪显示什么样的提示、提示显示的格式是什么样的等等。
在该过程中,我知道心细与耐心的重要性,因为在界面的修改过程中,要考虑到各种可能的结果,而且调试的过程中不可能一次性搞好的,要经过多次的修改与调试,从而达到最后的结果。
图5-1早期界面
图5-2修改后的界面
6结果展示
6.1加密操作
⑴在执行加密前,要确定文件位置,例如:
图6-1确认文件存在图6-2查看文档内容
图6-3加密操作
⑵加密完成后,在原文件旁会自动生成一个文档,这个文档是在原文档名称后面加后缀1并保存,里面保存着加密后的字符,这些字符可能是一些我们认识的字符,也有可能是乱码。
图6-4自动生成加密文档
图6-5加密字符
6.2解密操作
⑴执行解密和加密略有区别,它针对的对象是加密文档。
例如:
图6-6解密操作
⑵解密完成后,在原文件旁会自动生成一个文档,这个文档是在加密文档名称后面加后缀1保存,里面保存着解密后的字符,这些字符与原文档字符相同。
图6-7自动生成解密文档
图6-8解密字符
⑶可以看出原文档中字符与解密文档中的字符是完全相同的,给其他类型的文件加密解密方法一样,这里只以文本文档为例,因为它方便展示出来。
7结束语
本文主要介绍了对文件进行加密解密系统的设计与实现,通过分析选择加密方法,针对文件中的字符,利用它们对应的ASCCⅡ码值进行加密解密,方法比较简单。
在整个设计过程中,体现出
了我们团队的力量。
为了让我们的设计更加的完善,还需要不断的调试,发现错误并且改正错误。
还要感谢指导老师对我们帮助,使我们更好的完成这次学年设计。
参考文献
[1]何钦铭,颜晖.C语言程序设计[M].北京:
高等教育出版社,2008:
238~248
附录
///////////////////////////////////////////////////////////////////////////////
#include
#include
#include
staticchara[30000];
staticchard[40];
staticints;
staticintt;
///////////////////////////////////////////////////////////////////////////////
voidpanding()
{
inti=0,x,y,z;
while(d[i]!
='\0')
{
x=i;
i++;
}
y=x-1;
z=x-2;
if(d[x]=='t'&&d[y]=='x'&&d[z]=='t')
t=0;
else
t=1;
}
///////////////////////////////////////////////////////////////////////////////
voidcaozuo()
{
inti=0;
inty;
while(d[i]!
='\0')
{
if(d[i]=='.')
y=i;
i=i+1;
}
i=i-1;
while(i>=y)
{
d[i+1]=d[i];
i--;
}
d[y]='1';
}//对加密或解密后的文件进行存储位置的处理
///////////////////////////////////////////////////////////////////////////////
voidjiami(FILE*fp)
{
FILE*f2;
charch;
inti=0,g=0;
if(t==0){
if((f2=fopen(d,"w"))==NULL)
{
printf("\n\n\t\t打开失败!
\n");
exit(0);
}
}
if(t==1){
if((f2=fopen(d,"wb"))==NULL)
{
printf("\n\n\t\t打开失败!
\n");
exit(0);
}
}
do{
ch=fgetc(fp);
a[i]=ch;
a[i]=a[i]+1;
i=i+1;
}while(!
feof(fp));
i=i-2;
while(g<=i)
{
fputc(a[g],f2);
g++;
}
printf("\n\n\t\t加密成功!
\n");
printf("\n\n\t\t加密后的文件位置:
%s",d);
printf("\n");
fclose(f2);
}
///////////////////////////////////////////////////////////////////////////////
voidjiemi(FILE*fp)
{
FILE*f2;
charch;
inti=0,g=0;
if(t==0){
if((f2=fopen(d,"w"))==NULL)
{
printf("\n\n\t\t打开失败!
\n");
exit(0);
}
}
if(t==1){
if((f2=fopen(d,"wb"))==NULL)
{
printf("\n\n\t\t打开失败!
\n");
exit(0);
}
}
do
{
ch=fgetc(fp);
a[i]=ch;
a[i]=a[i]-1;
i=i+1;
}while(!
feof(fp));
i=i-2;
while(g<=i)
{
fputc(a[g],f2);
g++;
}
printf("\n\n\t\t解密成功!
\n");
printf("\n\n\t\t解密后的文件位置:
%s",d);
printf("\n");
fclose(f2);
}
///////////////////////////////////////////////////////////////////////////////
voidmain()
{
FILE*fp;
inti=0;
printf("\n\t\t***************************************************");
printf("\n\n\t\t\t\t简单文件加解密程序\n");
printf("\n\t\t***************************************************");
printf("\n\n\n\t\t1表示需要加密\n\n\t\t2表示解密");
printf("\n\n\n\t\t请输入你所要选择的方式:
");
scanf("%d",&s);
printf("\n\n\t\t请输入需要加密或解密文件的地址:
");
scanf("%s",d);
panding();
if(t==1)
{
if((fp=fopen(d,"rb"))==NULL)
{
printf("\n\n\t\t打开失败!
\n");
exit(0);
}
}
if(t==0){
if((fp=fopen(d,"r"))==NULL)
{
printf("\n\n\t\t打开失败!
\n");
exit(0);
}
}
caozuo();
if(s==1)
jiami(fp);
else
jiemi(fp);
fclose(fp);
}
致谢
经过数天的努力,不断地查阅资料和反复的修改设计,终于做出完整的结果。
在此忙碌的过程中,首先要感谢指导老师的提点与教导,同时,感谢小组队长以及成员给予很大的协助,本次设计得以圆满成功。
评语:
评阅教师签名:
年月日
成绩