文件加密实验报告.docx
《文件加密实验报告.docx》由会员分享,可在线阅读,更多相关《文件加密实验报告.docx(20页珍藏版)》请在冰点文库上搜索。
文件加密实验报告
C
语
言
课
程
设
计
实
验
报
告
实验名称:
文件加密
院系:
通信与信息工程学院
班级:
通信工程1101班
成员:
田轩铭(组长)、陈亮、张晨华、高梦、程腾
日期:
2012年6月25日—7月6日
设计题目:
文件加密
一、本次课程设计的目的
通过对文件的加密保护用户的私人隐私,使学生能更好的掌握好高级语言程序,从而了解对程序设计的基本概念和方法,进而学会利用C++语言解决一般应用问题,并为后续的专业学习奠定基础。
同时增强同学们之间的团队合作精神,使学生更好的融入社会,将来成为社会有用之才!
二、设计要求
1.要求打开一个源文件,按用户输入的密钥通过异或用算进行加密,加密后文件存入目标文件中。
2.要求开始时进行程序使用的鉴权,验证密码。
3.可以对程序原密码进行修改,对密钥进行修改。
4.要求写出设计报告,报告中要求写出总体设计框架和详细程序分析。
5.5-6名学生为一组,选出组长共同完成。
在报告中各同学要明确写出自己所做的工作,并由组长认可评定。
6.书写及设计方案均用A4纸打印以便统一装订成册,并且要求上交电子文本。
三、总体方案的设计及说明
文件加密主要可以分为两大部分:
对文件的加密、解密程序和对改密码、改密钥程序。
首先运行程序后会对用户进行一个鉴别,需要输入一个与程序事先设定好的密码才打开程序,输入错误次数最高为3次,此程序初始设定密码为123456,,所以输入超过6位的密码程序直接结束退出,输入单个字符字母和数字一样都可以最高输入3次错误,之后便系统自动退出,如输入2-6位字母则只可以输入2次错误系统自动退出,体现了其合理性对数字的高度识别性。
进入程序后该系统共有4个选项即:
1.文件加密2.文件解密3.修改密码0.退出程序
用户可选择对应项进行使用及操作。
并且进入系统后显示“Welcome”大字符,和相关设计者。
进入程序可以对指定的文件进行加密和解密,对密钥进行修改,加密时密钥可由用户随机输入,方便记忆体现其人性化的设计,从而便于加密后记忆,针对了不同的使用人群。
文件的加密、解密程序部分由陈亮、田轩铭同学负责。
改密码、改密钥程序部分的程序由张晨华、程腾同学负责。
课程设计报告和资料查询由田轩铭、高梦同学负责。
四、程序流程图
五、程序运行结果
1.打开程序,输入密码进行鉴权
2.密码输入三次错误后
3.密码输入正确后,进入程序
4.对文件进行加密(可自行指定任意一个)
5.加密成功
加密后的文件不输入密钥打开则是乱码
原文件:
6.文件解密
解了密钥的文件打开如下
7.修改密码
输入错误2次后,最后一次输入正确并改密123678
六、个人收获和体会
田轩铭(组长)1107020123
通过这次的作业我觉得最大的收获是不仅把平时学习到的知识理解的更加透彻,而且使知识更加系统化,同时还把有些平时不太注意的小问题发现了出来,这不但有利于我学习C语言,而且对于我学习任何一门课程都是很有益处的。
总之,做这份作业对于我们学习C语言有很大的帮助。
在做课程设计时,由于运用了很多新知识,新的方法,还有题目更加复杂,应用性更强,在编写过程中遇到了很多困难,幸好我们有团结的集体,通过大家的努力、配合,我们将问题逐个解决,最终成功的完成了作业,由于担任组长,我的领导能力得到了锻炼,对c语言有了进一步理解,这对我们工科学生来说意义是相当重大的,在此感谢我组同学的支持和老师的帮助和指导。
经过这次的学习、设计,我们学到了许多以前不懂的、难懂的知识。
这真是锻炼人的好机会,我很喜欢这种应用性的学习。
我要感谢我的老师、我的伙伴,你们使我懂得了许多、许多。
陈亮1107020117
在这次和同组人一起设计程序过程中,我深刻体会到一个人的力量是渺小的,只有大家同心协力,才能完成好一项工作。
在设计统计块时,开始遇到了不少困难。
例如:
文件加密异或是什么?
又如:
在写程序时,因为对数组,指针不熟悉,而出现了不少错误。
经过学习,讨论,最后克服了这些困难。
经过这次设计,我对数组,指针的知识和使用又上了一个台阶。
数组和指针那么地方便,它真是C语言的重点,精华所在。
所以,在以后的学习中,我更应抓紧对指针的学习。
张晨华1107020111
很高兴能有这样一个机会和同学一起完成一项任务,这其中有各种各样的问题,但通过大家一起讨论,并在老师的耐心辅导下,最终把那些问题都解决了。
从中我学到了如何应对困难,如何与人合作。
在最终完成作业的那一刻,我们心中都非常的高兴。
我想有了这样一次体验,在以后漫长的人生路上,我们在面对许多意想不到的困难与挫折时,我们会更从容的去面对。
通过这次合作,我使自己的动手能力和与人沟通的能力得到了提高,这将使我在以后的的道路上走的更稳,收获更多。
所以,我们应感谢老师的良苦用心。
本来我还不太赞成这种做法,但现在,我知道了,这是对的,是值的我们用心去做的。
同时我也知道了我们随时都要培养自己的动手能力,只有这样,才能更好的适应这个日新月异的飞速发展的社会。
高梦1107020105
C语言的确不太容易学,后来学了几节课,觉得也没什么,就是要记的东西比较多,每天都有新内容,记一记就可以了,但当老师布置了几个小作业之后,问题就出现了,单独拿出来每个东西我都略知一二,而让我把它们连接起来,做一个程序,那就难了,每次都是老师写好我们抄,一两次之后,通过对比,我发现这些程序之间有好多东西,都是共同的,变化的指示针对不同问题的处理方法,当然这要通过数学运算来完成,困难之处就是怎样把一个个问题用数学的方法表示出来,怎样表示更简便而已,我的数学还可以,这对我来说不成问题,因此我的信心又恢复了。
程腾1107020129
虽然在工作中我们有分歧,有争吵但我们都很好的解决了问题,增进了友谊,锻炼了团结协作能力,受益匪浅。
其中第一部分和第二部分有点难易失调,是我和组长共同完成,更加体现出了分工和协作的优点和重要性。
我对自己在这份作业中的表现特别满意,提出了很多很好的建议,事实表明那些建议确实起到了很好的作用。
也加深了我对”==”和”if”等的理解和操作,从实践中了解和体会到了C++的魅力和作用,也让我体会到大学学的东西的重要性。
七、组长评语
这次的课程设计中,让我们收获了很多。
首先,很荣幸我能成为组长和我们组的同学一起做这次的实习课题,而我们组能在规定的时间内出色完成,是我们组所有人共同努力的结果。
这次的课题,对我们来说确实难度非常大,对初学C语言的我们来说,最初的几次尝试,几乎就无法完成这个课题。
后来,在老师对课题的简单讲解后,我们对课题有了更深的理解,同时也有了完成课题的信心。
最后经过了不懈的努力,终于将这个程序完成。
在这里要谢谢老师对我们的帮助,更感谢我们组的同学,没有你们的努力,我们跟本无法这么快将这个课题做完。
我希望在今后的学习道路上,我们组还要继续发扬这种迎难而上精神,保持着对知识的渴望和追求,向着胜利的方向继续前进!
组长给小组成员打分表
学号
姓名
小组编号
任务分工
组长打分
1107020123
田轩铭(组长)
1
程序调试、实验报告
90
1107020117
陈亮
2
程序调试、资料收集
95
1107020111
张晨华
3
程序调试
90
1107020105
高梦
4
资料收集
90
1107020129
程腾
5
资料收集
90
源程序:
#include//标准输入、输出函数
#include//标准库函数
#include//字符串处理函数
#include//字符操作函数
/*/////////////////////////////////////////////////////////////
intgetpassword(charpassword[])//密码
{
FILE*fp;
charpwd[30];
if((fp=fopen("c:
\\password.dat","w+"))==NULL)
{
printf("出错!
程序退出\n");
}
else
{
fscanf(fp,"%s",pwd);
}
if(!
strcmp(password,pwd))
return
(1);
elsereturn(0);
}*/
///////////////////////////////////////////////////////////////加密解密
voidfun(char*s_file,char*m,char*c_file)//加密解密
{
inti=0;
FILE*fp1,*fp2;
registercharch;
fp1=fopen(s_file,"rb");
fp2=fopen(c_file,"wb");
if(fp1==NULL)
{
printf("不能打开文件\n");
exit
(1);
}
if(fp2==NULL)
{
printf("不能建立文件\n");
exit
(1);
}
ch=fgetc(fp1);
while(!
feof(fp1))
{
ch=ch^*(m);
fputc(ch,fp2);
ch=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
/*//////////////////////////////////////////////////更改密码
voidpasswordchange()
{
FILE*fp;
charpwd[30];
printf("请输入新密码:
\n");
scanf("%s",pwd);
fp=fopen("C:
\\password.dat","w");
fprintf(fp,"%s",pwd);
printf("密码修改成功\n");
fclose(fp);
}*/
///////////////////////////////////////打印欢迎界面
voidpr()
{
printf("\n#########################文本加密解密管理软件####################################\n\n");
printf("文******\n");
printf("本******\n");
printf("加1.文件加密*******\n");
printf("密2.文件解密****************************\n");
printf("解3.更改密码***************************\n");
printf("密0.退出系统**********************************\n");
printf("系************************\n");
printf("统*******************************\n");
printf("\n########################################################################################\n");
printf("\n请输入选项(0-3):
\n");
printf("DesignBy:
西安科技大学通信工程1101班田轩铭、陈亮、张晨华、高梦、程腾\n");
}
voidmain(intargc,char*argv[])
{intk,trytimes=0,newpwd,pwd;
charsourcefile[30];
charcodefile[30];
charm[10],ch;
intpassword=123456,flag=1;
intj,q;
printf("如需打开程序需验证您的权限\n");//鉴权作用,判断是不是本程序或电脑安装程序的使用者
for(trytimes=1,pwd=0;password!
=pwd&&trytimes<3;trytimes++)
{
printf("您还有%d次输入密码的机会,请输入6位数字密码:
\n",4-trytimes);//本程序密码设置为6位阿拉伯数字,如输入超过6位系统直接退出
scanf("%d",&pwd);
getchar(ch);
flag=0;
if(pwd==password)flag=1;
}
if(flag!
=1)
{printf("您已三次输入错误密码,请查证后再打开程序!
\n");//进入此程序共有三次输入密码机会,输入错误则系统自动退出
exit
(1);
}
loop:
system("pause");
system("cls");
pr();
scanf("%d",&k);
system("pause");
system("cls");
switch(k)
{
case(0):
{exit(0);break;}
case
(1):
{if(argc!
=4)
{printf("请输入要加密的文件名:
\n");//用户给需要加密的文件加密
scanf("%s",sourcefile);
printf("请输入密钥:
\n");//密钥是用户自己定义的,可以随意给需要加密的文件添加密钥
scanf("%s",m);
printf("请输入要保存的文件名:
\n");//给加密后的文件命名,并保存
scanf("%s",codefile);
fun(sourcefile,m,codefile);
}
else
{
strcpy(sourcefile,argv[1]);
strcpy(m,argv[2]);
strcpy(codefile,argv[3]);
fun(sourcefile,m,codefile);
}
system("cls");
printf("文件已成功加密,正在保存,请稍后");
}
break;
case
(2):
{
if(argc!
=4)
{printf("请输入要解密的文件名:
\n");//用户给需要解密的文件解密
scanf("%s",sourcefile);
printf("请输入密钥!
\n");//需要输入用户之前设定的密钥对加密的文件进行解密
scanf("%s",m);
printf("请输入要保存的文件名:
\n");//对解密的文件系统又可以提供保存路径
scanf("%s",codefile);
fun(sourcefile,m,codefile);
}
else
{
strcpy(sourcefile,argv[1]);
strcpy(m,argv[2]);
strcpy(codefile,argv[3]);
fun(sourcefile,m,codefile);
}
system("cls");
printf("文件已成功解密,正在保存,请稍后");
}break;
case(3):
{for(pwd=0,flag=1,trytimes=0;password!
=pwd&&trytimes<3;trytimes++)
{
printf("您还有%d次输入原密码的机会,请输入原密码:
\n",4-trytimes);//修改该程序原密码,如原密码输入错误次数超过限定则程序自动退出
scanf("%d",&pwd);
flag=0;
if(password==pwd)
flag=1;
}
if(flag)
{
printf("请输入新密码:
");//保存修改后的新密码
scanf("%d",&newpwd);
password=newpwd;
}else
{
printf("您已三次输入错误密码,请查证后再打开程序!
");
exit
(1);
}
}break;
default:
printf("请输入正确的选择!
");//如输入不是系统所设序号,系统会提示此项
}
for(q=0;q<270000000;q++)
;
system("cls");
printf("接下来您想干什么:
\n");
printf("1:
返回至初始步\n");
printf("2:
立刻关闭程序\n");
scanf("%d",&j);
if(j==1)
gotoloop;
else
{if(j==2)
exit
(1);
elseprintf("请输入正确的选择!
");//如输入不是系统所设序号,系统会提示此项
}
}
参考资料
《C程序设计(第二版)》谭浩强清华大学出版社
《C语言程序设计》田祥松西安电子科技大学出版社
《C语言课程设计》黄明等电子工业出版社
《C语言编程之道》刘彬彬等人民邮电出版社
《C语言程序设计现代方法》【美】K.N.King著吕秀峰译人民邮电出版社
《C语言经典范例50讲》任志宏程超北京希望电子出版社