




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计综合课程设计报告PAGE24仲恺农业工程学院课程设计文件加密姓名孙浩斌院(系)信息科学与技术学院专业年级计算机132学号201320244207指导教师罗慧慧职称学生起止时间2015-6-15至2015-6-24仲恺农业工程学院教务处制目录一.课程设计目的和要求 21.1设计目的 21.2设计要求 21.3设计意义 3二.课程设计任务内容 32.1背景 32.2功能需求 3三.模块设计 43.1系统模块 43.2主函数流程图 53.3函数流程图 63.3.1加密函数流程图 63.3.2解密函数流程图 73.3.3显示函数流程图 83.3.4统计单词流程图 9四.软件使用说明 104.1进入界面 104.2加密文件 114.3解密文件 114.4显示文件 134.5统计单词个数 13五.课程设计心得与体会 145.1关于对程序编写的心得 145.2对于课程设计的心得体会 14附录1:参考文献 15附录2:程序代码 15一.课程设计目的和要求1.1设计目的有时我们有些资料不希望别人看到,最常用的方法就是加密。对给定的相关文件进行加密可以对文件进行保护,可以防止某些重要信息不被别人所知道甚至窃取。对文件起到保护作用,可以方便用户使用某些只有自己能知道的信息,能够安全保护文件的相关内容几信息不被外流。随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也面临着信息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问题已威胁到国家的政治、经济、军事、文化、意识形态等领域,同时,信息安全问题也是人们能否保护自己的个人隐私的关键。信息安全是社会稳定安全的必要前提条件。通过课程设计,使学生了解高级程序设计语言的结构,逐渐培养学生的编程能力、用计算机解决实际问题的能力,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试程序及编写设计报告。本课程设计的目标:
1.巩固《高级语言程序设计》课程学习的内容和加深学生对基本知识的理解和掌握。
2.掌握编程和程序调试的基本技能。
3.掌握软件设计的方法。
4.提高运用程序设计解决实际问题的能力。5.培养独立思考、综合运用所学有关相应知识的能力。6.强化上机动手编程能力,闯过理论与实践相结合的难关!1.2设计要求1.分析课程设计题目的要求,根据所要求的程序功能,画出程序的流程图。对系统功能模块进行分析,写出详细设计说明文档。对程序源代码进行调试与测试,使其能正确运行。设计完成的软件要便于操作和使用。设计完成后提交课程设计报告。1.3设计意义至今,密码技术是取得信息安全性最有效的一种方法,密码技术是信息安全的核心技术。通过数据加密,人们可以有效地保证通信线路上的内容不被泄露,而且还可以检验传送信息的完整性。进一步,密码技术可以应用于数字签名、身份认证和信息鉴定,这些应用对于资源存取控制以及其它安全措施是必须而且有效的。相对于防病毒软件和防火墙软件来说,基于密码技术密码类产品、认证类产品份额相对较小,但随着金融、电信、政府等行业信息化建设对于网络安全整体解决方案需求的增加,将会有较大的增长。二.课程设计任务内容2.1背景加密技术是电子商务采取的主要安全保密措施,是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。2.2功能需求实现对文件的加密与解密,要求有图形用户界面。细则如下:1.能够对一个文件进行加密。2.加密后生成一个新文件,并且原文件删除。3.能将加密生成的文件还原成原文件。4.能够统计文件中单词个数。三.模块设计3.1系统模块包括四个模块:加密模块,解密模块,显示模块,统计单词模块图3-1系统模块图3.2主函数流程图在主函数中,利用switch语句实现对各个项目的函数调用。图3-2主函数流程图3.3函数流程图3.3.1加密函数流程图先读取原文件数据,将原文件称需经过特定条件转换后存放到另一个文件夹。加密过程,即将读取文件的字符根据加密公式转化为别的字符实现加密。但由于后面的解密重要判断是否已经是加密文件,所以在文件末尾做记号标记。存到另一文件夹后关闭文件,最后用remove,rename两个函数实现删除源文件,将加密后文件命名为原文件名,这样只剩下一个加密文件了。图3-3加密函数流程图3.3.2解密函数流程图先判断是否已经加密,这时要利用加密函数中使用的标识符,可以用fseek函数读取文件末尾的标识符判断是否已加密。若是则解密,否则不解密。图3-4解密函数流程图3.3.3显示函数流程图 利用文件的操作,用fgetc函数从文件读取数据,再用putchar函数将数据显示到屏幕。图3-5显示函数流程图3.3.4统计单词流程图从文件中读取字符串,存到数组中。接着从字符串中读取一个英文单词,出来与要统计的单词比较(strcmp函数),定义一个计数的变量实现记录单词出现的次数。 图3-6统计单词流程图四.软件使用说明4.1进入界面输入0—5,实现不同功能。图4-1若输入错误,重新输入。图4-24.2加密文件输入要加密文件名,文档内容。图4-3图4-4图4-54.3解密文件输入进入系统密码图4-6图4-7图4-8图4-9图4-104.4显示文件图4-114.5统计单词个数图4-12程序存在问题:1.没有独立的磁盘管理功能,没有能从磁盘开辟空间,对文件进行定义,分区存储以及管理。
2.加密解密方式过于简单,并没有实现完全的加密封锁。虽然进行了转码,能避免重要信息直接以明文的方式呈现,但是假如有入侵者获取了控制权,虽然他不能够获取文件的信息,但是他可以把这个文件直接删除,或者做一些损坏性的操作。这堆用户来说依然是不安全的。程序改进方案: 1、本程序采用的按字符异或加密的算法是一种比较简单的加密算法,安全性较差,若对文件保密性要求比较高,则可采用一些复杂的算法进行加密。 2、本程序入口只能输入要加密或解密的目标文件名,而对加密或解密后的文件不能自定义,只能用程序提供的anma.txt和mingma.txt存放文件,这样,当对同一目录下多个文档加密时,加密解密操作后的文件会替换原来的文件,造成数据丢失;五.课程设计心得与体会5.1关于对程序编写的心得这个程序看起来挺简单的,但对于对C语言还是初学者的我,还是显得有些难度的。在编写的过程中,由于粗心经常出现一些比较简单的错误,比如遗漏逗号、双引号、小括号,以及项目名称,从而导致出现乱码。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起!但是,通过上网查询还有在老师、学长和同学的帮助下,我最终还是完成了程序的编写。5.2对于课程设计的心得体会作为计算机类本科生教学的主要基础课之一,课程紧密结合计算机课程类的专业特点,系统介绍操作系统的基本知识,基本组成,体系结构和工作模式,从而使学生能较清楚地了解操作系统的知识,建立起系统的概念。这次操作系统课程设计用时两个个星期,在整整两个一星期的日子里,可以说得是大家积极努力准备,同时可以学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前,在写一个程序的时候,我总是不细心,怕很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,确保程序的正确性上都有了很大程度的提高。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在同学和老师的辛勤指导下,终于游刃而解。附录1:参考文献1.谭浩强:C程序设计,清华大学出版社,2005年7月第三版2.谭浩强:C++程序设计,清华大学出版社,2004年6月第一版3.谭浩强,张基温,唐永炎:编著,C语言程序设计教程.北京:高等教育出版社,19924.操作系统教程(费祥林,骆斌)附录2:程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include<conio.h>#defineM20/*宏定义文件名字符串数组大小*/#defineN20/*宏定义解密码字符串数组大小*/#defineW20/*宏定义单词字符串数组大小*/#defineF1000/*宏定义文件读取字符串数组大小*/#defineE3/*宏定义解密系统密码输入次数*/charmina[]="ulinchen";/*初始化解密系统进入密码*/voidmenu(void);/*主菜单*/voidshuru(void);/*输入*/voidjiami(void);/*加密*//*函数原型*/voidjiemi(void);/*解密*/voidshow(void);/*显示*/voidcount(void);/*统计单词数*/intjudge(void);/*是否继续判断函数*/intmain(){charnum;while(1){menu();/*显示主菜单*/scanf("%c",&num);/*输入数字0--5*/fflush(stdin);/*清除数据流,防止恶意输入字符串,直接操作以第一个字符后面字符串为名的文件*/switch(num)/*选择语句*/{case'0':/*选择0*/printf("\n");exit(0);case'1':/*选择1*/system("cls");shuru();/*输入*/printf("\n按任意键返回主菜单");break;case'2':/*选择2*/system("cls");jiami();/*加密*/printf("\n按任意键返回主菜单");break;case'3':/*选择3*/system("cls");jiemi();/*解密*/printf("\n按任意键返回主菜单");break;case'4':/*选择4*/system("cls");show();/*显示*/printf("\n按任意键返回主菜单");break;case'5':/*选择5*/system("cls");count();/*统计单词数*/printf("\n按任意键返回主菜单");break;default:/*输入错误*/printf("\n\t\t输入错误,请重新输入。(按任意键返回主菜单)");break;}getch();/*等待输入,是界面停留*/fflush(stdin);/*清除数据流*/system("cls");/*清屏*/}}voidmenu(void)/*主菜单函数*/{printf("\n\n");printf("\t********************************************************\n");printf("\t**\n");printf("\t*1--输入2--加密3--解密4--显示5--统计0--退出*\n");printf("\t**\n");printf("\t********************************************************\n");printf("\n\n");printf("\t0.退出系统。、\n");printf("\t1.输入信息,并写入数据文件。\n");printf("\t2.对给定的文件进行加密。\n");printf("\t3.对给定的文件进行解密。\n");printf("\t4.显示文本文件的内容。\n");printf("\t5.统计某单词在文件中出现的次数。\n");printf("\n\n");printf("\t请选择(0--5):");}voidshuru(void)/*输入函数*/{FILE*fp;intx=1;/*定义x=1,输入*/charch,fname[M];while(x){printf("\n\n键入要输入信息的文件名:");scanf("%s",fname);/*输入文件名*/if((fp=fopen(fname,"w"))==NULL)/*若不能打开*/{printf("存储空间不足!!!\n");exit(0);}else{printf("请输入文档的内容:(以Ctrl+z结束)\n");fflush(stdin);while((ch=getchar())!=EOF)fputc(ch,fp);fclose(fp);}printf("\n文档输入并保存成功!");printf("继续创建文件并输入信息?(按Y继续)");x=judge();}}voidjiami(void)/*加密函数*/{FILE*fp,*fp1;charc,pd,fname[M];intx=1;while(x){printf("\n\n键入要加密的文件名称:");scanf("%s",fname);if((fp=fopen(fname,"r"))==NULL){printf("\n此文件未能打开,重新输入(按Y)?");fflush(stdin);x=judge();}else{if(!fseek(fp,-(long)sizeof(char),SEEK_END))pd=fgetc(fp);/*判断文件是否已进行加密步骤*/if(pd=='$'){printf("\n文件已使用本程序加密!!!");printf("重新输入要加密的文件名(按Y)?");x=judge();fclose(fp);}else{rewind(fp);if((fp1=fopen("jiami.txt","w"))==NULL){printf("存储空间不足!!!\n");exit(0);}printf("\n加密后的文档:\n\n");while((c=fgetc(fp))!=EOF){fputc(c+520,fp1);/*加密公式“c+520”*/putchar(c+520);}fclose(fp);fclose(fp1);fp1=fopen("jiami.txt","a");fputc('$',fp1);fclose(fp1);remove(fname);/*删除被加密的原文件*/rename("jiami.txt",fname);/*加密后的文件名更改为原文件名*/printf("\n\n文档加密并保存成功!");printf("继续加密文件?(按Y继续)");x=judge();}}}}voidjiemi(void)/*解密函数*/{FILE*fp,*fp1;charc,pd,fname[M],mm[N],mima[N];intx=1,y=1,z=0;while(y){system("cls");printf("\n\n请输入进入解密系统的密码:");scanf("%s",mm);if(strcmp(mm,mima)==0)/*验证密码,判断字符串是否相等*/{y=0;while(x){fflush(stdin);printf("\n\n键入要解密的文件名称:");scanf("%s",fname);if((fp==fopen(fname,"r"))==NULL){printf("\n此文件未能打开,重新输入(按Y)?");fflush(stdin);x=judge();}else{if(!fseek(fp,-(long)sizeof(char),SEEK_END))pd=fgetc(fp);if(pd!='$'){printf("\n文件未曾使用本程序加密!!!");printf("重新输入要加密的文件名(按Y)?");x=judge();fclose(fp);}else{rewind(fp);if((fp1=fopen("jiemi.txt","w"))==NULL){printf("存储空间不足!!!\n");exit(0);}printf("\n解密后的文档:\n\n");while((c=fgetc(fp))!='$'){fputc(c-520,fp1);putchar(c-520);}x=0;fclose(fp);fclose(fp1);remove(fname);/*删除被解密的文件*/rename("jiemi.txt",fname);/*解密后的文件名更改为原文件名*/printf("\n\n文档解密并保存成功!");printf("继续解密文件?(按Y继续)");x=judge();}}}}else{printf("\n\n密码输入有误!\n");printf("\n重新输入密码?(按Y重新输入)\n");y=judge();z++;if(z==E){printf("\n对不起,您输入错误次数太多,请仔细回想密码!\n");y=0;}}}}voidshow(void)/*显示函数*/{FILE*fp;charfname[M];intx=1;while(x){printf("\n\n键入要显示的文件名称:");scanf("%s",fname);if((fp=fopen(fname,"r"))==NULL){printf("\n此文件未能打开,重新输入(按Y)?");x=judge();}else{printf("\n%s的内容是:\n\n",fname);while(!feof(fp))/*判断是否为文件末尾*/putchar(fgetc(fp));printf("\n");fclose(fp);printf("\n继续显示文件(按Y继续)?");x=judge();}}}voidcount(void)/*统计单词数函数*/{charfname[M],word[W],/*要统计的单词*/str[F],/*保存文档内容*/nword[M];/*从内容读取的单词*/inti=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业院校学生干部选拔计划
- 交通运输企业年度安全教育培训计划
- 2025秋季幼儿园医疗资源协调计划
- 四年级数学(除数是两位数)计算题专项练习及答案
- 四年级数学(四则混合运算)计算题专项练习与答案汇编
- 心理健康教育在特殊教育中的措施
- 贵金属冶炼工复习试题含答案
- 联大学堂《马克思主义基本原理(西北大学)》题库附答案
- 小学英语下册评优评先计划
- 2019-2025年卫生招聘考试之卫生招聘(财务)全真模拟考试试卷A卷含答案
- 2025年浙江省金华市义乌市六年级下学期5月模拟预测数学试题含解析
- 高压均质及热处理改性鹰嘴豆蛋白对减磷猪肉糜凝胶特性的影响机制
- 人效提升方案
- 2025春-新版一年级语文下册生字表(200个)
- 期末易错题型创新改编练习(专项练习)六年级下册数学人教版
- 《桥梁工程概况介绍》课件
- 2025年四川成都道德与法制中考试卷(无)
- 2024年不动产登记代理人《地籍调查》考试题库大全(含真题、典型题)
- 中医基础学题库(附答案)
- 大学美育知到智慧树章节测试课后答案2024年秋长春工业大学
- 2024年秋《MySQL数据库应用》形考 实验训练1 在MySQL中创建数据库和表答案
评论
0/150
提交评论