C语言程序设计-文件加密.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 文件 加密
- 资源描述:
-
. C语言程序设计 课程设计报告 学期: 2014-2015(1) 班级: 计科14-1 学号: 1060314014039 1060314014041 组员姓名: 张浩 刘润龙 指导教师: 李竹林 完成日期: 2014 年 12 月 文件加密与解密 一 、设计目的: 通过对文件的加密保护与解密,使我们能更好的掌握好高级语言程序,从而了解对程序设计的基本概念和方法,进而学会利用C语言解决一般应用问题,并为后续的专业学习奠定基础。同时增强同学们之间的团队合作精神,使我们更好的融入社会,将来成为社会有用之才! 二 、 设计内容: 将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对 应字符进行移位操作即可,解密时移动相反。 例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可 得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前 移动5位(注a后接z),可得到原文abcdef。 三 、设计安排: 第一阶段:选择课程设计的题目 第二阶段:搜寻有关课程设计的资料,查阅相关的书籍 第三阶段:开始编写C语言程序 第四阶段:完成C语言程序的编写,开始撰写C语言课程设 计报告 第五阶段:完成C语言课程设计报告的撰写 四 、组员分工: 文件的加密、解密程序部分由张浩同学负责。课程设计报告,资料查询和程序调试修改由刘润龙同学负责,最后共同总结学习体会与心得。 五 、总体方案的设计思想及说明: 1.主要思想: 为由总到分,由上到下的逐级分配任务的思想。通过主函数调用各个被调用的函数,再由被调用函数通过多个循环嵌套的使用实现各自的功能,最终达到程序的要求。 2.程序说明: (1)主函数其中包括:输入函数input(),加密函数jiami(),解密函数jiemi(),显示函数 show(),。 (2) 输入函数中:while((c=getchar())!=EOF)的使用能提示使用者结束的命令,并且通过fputc(c,fp)把一个字符c写到由文件指针fp指定的磁盘文件上。 (3)加密函数中:先定义两个指针,将输入的文件内容通过fputc(c+1,fp1);进行加密并保存到fp1所指定的文件上。 (4) 解密函数中:在进入解密系统时,需先输入解密密码,然后在打开文件进行文件里内容解密。根据加密时对每个文件内容的加密操作,所以解密时只需按照相同方法反操作即可。 六 、源程序: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include<conio.h> #define N 30 /*文件名字符串数组大小* / #define M 30 /* 解密码字符串数组大小*/ #define E 500 /*数组大小 */ void menu(void); /*主菜单 */ void input(void); /*输入数据的函数*/ void jiami(void); /*对输入数据加密的函数*/ void jiemi(void); /*对已加密内容进行解密的函数 */ void show(void); /*显示内容的函数*/ int judge(void); /*判断是否要继续的函数*/ char code[]="2011810063"; /*设置进入解密系统所需的密码*/ main() { int num; while(1) { menu(); flushall(); scanf("%d", &num); switch(num) { case 0: printf("\n"); exit(0); case 1: system("cls"); input(); break; case 2: system("cls"); jiami(); break; case 3: system("cls"); jiemi(); break; case 4: system("cls"); show(); break; case 5: system("cls"); count1(); break; case 6: system("cls"); count2(); break; default: printf("\n\t输入错误,请按规范重新输入!"); break; } getch(); /* 等待数据输入,使界面停留*/ } } void menu(void) { printf("\n\n\n\n\t**************************************************\n"); printf("\t**\n"); printf("\t* 1--输入 2--加密 3--解密 4--显示 0--退出 *\n"); printf("\t**\n"); printf("\t********************************************************\n"); printf("\n\n\t 0. 退出系统。\n"); printf("\t 1. 输入信息,并写入文本文件。\n"); printf("\t 2. 对给定的文件进行加密。\n"); printf("\t 3. 对给定的文件进行解密。\n"); printf("\t 4. 显示文本文件的内容。\n"); printf("\n\t 请选择(0--4):"); } void input(void) { int n=1; FILE *fp; char c, fname[N]; while(n) { printf("\n请输入文件名:\n"); scanf("%s",fname); if ((fp=fopen(fname,"w")) == NULL) { printf("文件打不开!\n"); exit(0); } Else { printf("请输入文件内容:(若结束请按ctrl+z)\n"); while((c=getchar())!=EOF) /* 输入文件的内容,以ctrl+z结束*/ fputc(c,fp); fclose(fp); } printf("文档输入并保存成功!\n"); printf("\n若继续创建文档,请输Y或y..."); n=judge(); /*退出解密系统*/ } } void jiami(void) { int n=1; FILE *fp,*fp1; char c,fname[M]; while(n) { printf("\n请输入要加密的文件名称:\n"); scanf("%s",fname); if ((fp=fopen(fname,"r")) == NULL) { printf("\n无法打开文件!\n若重新输入,请输Y或y..."); n=judge(); //退出 } if ((fp1=fopen("jiami.txt","w"))==NULL) { printf("无法打开文件!\n"); exit(0); } while((c=fgetc(fp))!=EOF) /*按ctrl+z结束*/ { fputc(c+1,fp1); // 加密 putchar(c+1); } fclose(fp1); fclose(fp); remove(fname); /* 删除被加密的原文件*/ rename("jiami.txt",fname); /* 加密后的文件名更改为原文件名*/ printf("\n文档加密并保存成功!\n"); printf("\n\n是否继续加密?若继续请按Y或y...\n"); n=judge(); /*退出*/ } } void jiemi(void) { int n=1; FILE *fp,*fp1; char c, fname[M],code1[M]; while(n) { printf("\n请输入进入解密系统所需密码:"); scanf("%s",code1); if(strcmp(code1,code)==0) /*比较字符串大小是否相等*/ { while(n) { printf("\n请输入要解密的文件名:"); scanf("%s",fname); if ((fp=fopen(fname,"r")) == NULL) { printf("\n文件打不开\n"); exit(0); } if ((fp1=fopen("jiemi.txt","w"))==NULL) { printf("无法打开文件!\n"); exit(0); } while((c=fgetc(fp))!=EOF) { fputc(c-1,fp1); /*解密*/ putchar(c-1); } fclose(fp1); fclose(fp); remove(fname); /* 删除被解密的原文件*/ rename("jiemi.txt",fname); /*解密后的文件名更改为原文件名*/ printf("\n是否继续解密?若继续请按Y或y..."); n=judge(); /*退出*/ } } else { printf("\n输入密码有误!请重新输入...\n"); } } } void show(void) { int n=1; FILE *fp; char fname[M]; while(n) { printf("\n请输入要显示的文件名称:"); scanf("%s",fname); if ((fp=fopen(fname,"r"))==NULL) { printf("\n文件打不开,若要继续输入请按Y或y..."); n=judge(); /*继续*/ } Else { printf("\n%s的内容是:\n\n",fname); while(!feof(fp)) /*判断是否是文件末尾*/ putchar(fgetc(fp)); /*显示文件内容*/ printf("\n"); fclose (fp); printf("若要继续显示文件,请按Y或y..."); n=judge(); /*退出*/ } } } 1.输入文件内容界面 2.文件加密界面 (2)显示解密文件 七、实验总结: 1.把程序写成小函数的集合,有助于程序编写、调试、维护和修改的方便。 2.在相关性不是很大的语句之间可以使用空行隔开,有利于区分各个语句的具体作用,在修改程序时起到一定的作用,提高了程序的可读性。 3.在switch语句中未加getch();使得界面不会停留,直接跳回主菜单界面。 4.在输入文件时,语句scanf("%s",fname);中的%s误写成%c,导致输入错误。 5.在对文件操作时需要注意关闭文件的操作,假如没有关闭,将会使在运行 程序之时,不能对文件进行删除或者重命名的操作。导致一些未知错误。 6.要及时使用清屏函数清除键盘缓冲区的文件及数据流,否则会导致不必要的错误。 7.在编写解密程序时,要注意使用两个while进行嵌套,使得在判断是否输入密码正确后,再判断解密的文件及是否继续解密其他文件。 8.通过这次的课程设计,我明白了,不管多么复杂的程序,其实都是有许许多多的小集合体组成的,只要肯花时间,肯认真,在编写程序的实践中,终将会将一系列的问题解决,从而达到目的,提高自己的能力,实践是检验真理的唯一标准! 八、个人收获与体会: 组员:张浩 通过这次的作业我觉得最大的收获是不仅把平时学习到的知识理解的更加透彻,而且使知识更加系统化,同时还把有些平时不太注意的小问题发现了出来,这不但有利于我学习C语言,而且对于我学习任何一门课程都是很有益处的。总之,做这份作业对于我们学习C语言有很大的帮助。 在做课程设计时,由于运用了很多新知识,新的方法,还有题目更加复杂,应用性更强,在编写过程中遇到了很多困难,幸好我们有团结的集体,通过大家的努力、配合,我们将问题逐个解决,最终成功的完成了作业,对c语言有了进一步理解,这对我们说意义是相当重大的,在此感谢我组同学的支持和老师的帮助和指导。 经过这次的学习、设计,我们学到了许多以前不懂的、难懂的知识。这真是锻炼人的好机会,我很喜欢这种应用性的学习。我要感谢我的老师、我的伙伴,你们使我懂得了许多、许多。 组员:刘润龙 在这次和同组人一起设计程序过程中,我深刻体会到一个人的力量是渺小的,只有大家同心协力,才能完成好一项工作。在设计统计块时,开始遇到了不少困难。如:在写程序时,因为对数组,指针不熟悉,而出现了不少错误。经过学习,讨论,最后克服了这些困难。 经过这次设计,我对数组,指针的知识和使用又上了一个台阶。数组和指针那么地方便,它真是C语言的重点,精华所在。所以,在以后的学习中,我更应抓紧对指针的学习。 我想有了这样一次体验,在以后漫长的人生路上, 我们在面对许多意想不到的困难与挫折时,我们会更从容的去面对。通过这次合作,我使自己的动手能力和与人沟通的能力得到了提高,这将使我在以后的的道路上走的更稳,收获更多。所以,我们应感谢老师的良苦用心。同时我也知道了我们随时都要培养自己的动手能力,只有这样,才能更好的适应这个日新月异的飞速发展的社会。 部分内容来源于网络,有侵权请联系删除!展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




C语言程序设计-文件加密.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4942409.html