c语言程序设计加密系统,c语言程序设计文件加密解密.doc

253b171540df25e1b84436cbe50dfc72.gifc语言程序设计文件加密解密.doc

程序报告设计题目加密解密处理程序设计报告的电子文档(B10080128程序设计.doc )一 老师对作业要求。1对学生课程设计两周的纪律及提交内容的要求(1)规定上机的时间内不得无故缺勤,有事需要向指导老师书面请假;(2)上机时禁止玩游戏,屡教不改者,实习成绩可为不及格;(3)每人手头准备一至两本C/C的有关工具书,上机前作好充分的准备,包括事先写好主要算法的程序代码以保证充分利用上机的时间调试程序;(4)同组可以讨论思路,但是程序要自己完成,不可抄袭,若完全抄袭别人的,实习成绩可为不及格;(5)实习的最后阶段认真完成实习报告的电子文档。报告内容不得少于15页。(6)每个学生最后提交的材料压缩文件一个,起名为学号名_题目名.rar(如B06020127_学生管理系统.rar)。该压缩文件中包含下列几个文件程序设计报告的电子文档(起名为学号_程序设计.doc)、源程序文件(起名为学号名_题目名.cpp,如B06020127_学生管理系统.cpp)、原始数据文件(如stud.dat)、编译链接后得到的可执行文件(起名为学号名_题目名.)(7)请同学独立完成报告,若发现两份报告一模一样,则两人都按不及格论处,请各位同学珍惜自己的版权,也请指导老师严格把关。附2上机时间每天上午8001120附3成绩的评定根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况、验收答辩时的表现等综合打分。等级为优秀、良好、中等、及格、不及格。附4课程设计报告具体内容要求学生管理系统(题目格式宋体,3号,加粗,居中对齐)一、课题内容和要求(格式宋体,4号,加粗,两端对齐)该部分可参考前面给出的问题描述再加以细化一些(正文格式宋体,小4号,不加粗,两端对齐,1.5倍行距)二、需求分析(格式宋体,4号,加粗,两端对齐)在该部分中叙述每个模块的功能要求(正文格式宋体,小4号,不加粗,两端对齐,1.5倍行距)概要设计 (格式宋体,4号,加粗,两端对齐)在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型声明)。(正文格式宋体,小4号,不加粗,两端对齐,1.5倍行距)四、源程序代码 (格式宋体,4号,加粗,两端对齐)各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。(正文格式宋体,小4号,不加粗,两端对齐)五、测试数据及其结果分析(格式宋体,4号,加粗,两端对齐)(正文格式宋体,小4号,不加粗,两端对齐,1.5倍行距)六、调试过程中的问题(格式宋体,4号,加粗,两端对齐)每个模块设计和调试时存在问题的思考(问题是哪些问题如何解决),以及算法的改进设想。(正文格式宋体,小4号,不加粗,两端对齐,1.5倍行距)七、课程设计总结(格式宋体,4号,加粗,两端对齐)总结可以包括 程序设计过程的收获、遇到的问题,遇到问题解决问题过程的思考、程序调试能力的思考,对该课程组织和考核方式的建议等。(正文格式宋体,小4号,不加粗,两端对齐,1.5倍行距) 原始数据文件(stud.dat)课题内容和要求1.编写一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032空格122z,则进行模运算既N122。解密与加密的顺序相反。2、部分要求(1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。(2)显示菜单*1.设置加密方法2.加密3.解密4.退出*(3)选择菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。(4)定义原始文件sourse.txt、加密文件result.txt和还原文件recall.txt3、其他要求(1)变量、函数命名符合规范。(2)注释详细每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。(3)程序的层次清晰,可读性强。4、需要掌握的知识(1)如何读写文件(2)如何对字符进行加减操作,并保证加减后的数值处于某一范围之内 (模运算) (3) 了解加解密的基本原理需求分析模块分析(1) 在屏幕上显示文件 void printtxt 用于将原始文件sourse.txt,加密文件result.txt,解密文件recall.txt,的内容显示在屏幕上,方便检验程序是否正确执行。在此函数中要以输入方式打开三个文件。(2) 加密void encode 对原始文件sourse.txt整个或部分字符串加密,并将加密后的内容写入result.txt上。加密时,每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032空格122z,则进行模运算即N122. 例如加密thet1164,h1049,e1016 变为xqk(3) 解密void decode 对加密后的result.txt进行解密,并将解密后的内容写入recall.txt文件中。解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122,即 N122, 其中N为负数。 例如把xqk解密 x 120-4 q111-9 k 107-6 变为 the(4) 设置加密方法void set 由键盘输入,进行加密方法的设置,主要由输出输入语句组成,目的是为了方便人机交流。(5)显示菜单*1.设置加密方法2.加密3.解密4.退出*(6)加密方法用结构表示struct password /*加密方法*/ char ps10; /*加密字符串*/long wd;/*加密的字节数*/;概要设计 1.加密程序的设计开始,以输出方式打开加密文件,以输入方式打开原始文件,判断文件是否为空,若为空,对字符串进行加密定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码加上加密字符串所对应的数字减去48,得到的就是加密后的字符,如果范围超过ASCII码值的032空格122z,则进行模运算即N122,将加密后的文字写入加密文件,关闭打开的两个文件,屏幕显示加密成功。如果文件不为空,则对文件中字符加密,加密过程与上述加密过程相似。2.解密程序的设计开始,以输出方式打开解密密文件,以输入方式打开加密文件,对加密后的文件中的字符串进行解密定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码减去加密字符串所对应的数字加上48,得到的就是解密后的字符,若执行减法后得到一个负数,则把这个负数加122,即 N122, 其中N为负数。将解密后的文字写入解密文件,关闭打开的两个文件,屏幕显示解密成功。3.显示程序的设计以输入方式打开原始文件,加密文件,解密文件,将文件中进行的字符串读入到屏幕上,方便读者进行比较。编译连接后得到可执行文件(B10080128加密解密处理.exp)源程序代码 includestring.hincludestdlib.hinclude stdio.hstruct password /*加密方法*/ char ps10; /*加密字符串*/ long wd; /*加密的字节数*/ ; struct password password; 定义一个加密方法结构变量char s100; void set 加密方法设置函数 printfn输入加密字符串; scanfs,password.ps; printfn输入加密字节数; scanfld, getchar; systempause; /*按任意键继续,使界面整洁*/ void printtxt /*显示显示原始文件和解密文件函数*/ /*以读方式打开文件*/ FILE *source source.txt,rt; 打开原始文件 FILE *result result.txt,r; FILE *recall recall.txt,rt; 打开解密文件 char c; 临时字符存储变量 ifsource NULL 文件存在性判断 printf不存在 source.txt 文件n; exit0; ifresult NULL printf不存在 result.txt 文件n; exit0; ifrecall NULL 文件存在性判断 printf不存在 recall.txt 文件n; exit0; c fgetcsource; 先从原始文件读出一个字符,若不是文件结尾,则文件内容非空 ifc EOF 文件内容为空,输出加密字符 printfn加密字符; printfsn,s; else 文件非空,输出原始文件 printfn原始文件; printfc,c; whilecfgetcsource EOF 文件非空调用判断 printfc,c; printfn; printfn解密文件; whilecfgetcresult EOF 文件非空,输出解密文件 printfc,c; printfn; printfn; printfn解密文件; whilecfgetcrecall EOF 文件非空,输出解密文件 printfc,c; printfn; /*下面是文件关闭操作*/ fclosesource; fcloseresult; fcloserecall; systempause; void encode /*加密*/ int m,nstrlenpassword.ps,i,flag 1; m存储加密字符长度 ,n存储加密字符串 ,i 为临时变量 char N,w; char c,C; 临时字符存储变量 FILE *result result.txt,wt; 以写方式打开result。txt文件 FILE *source sourse.txt,wt; 以写方式打开source。txt文件 ifresult NULL 文件非空容错处理 printf不存在 result.txt 文件n; exit0; ofstream outresult.txt; ifsource NULL 文件非空容错处理 printf不存在 source.txt 文件n; flag 0; ifstream fwsourse.txt; ifstream fss,iosnocreate; if flag 1 C fgetcsource;先得到一个文件内容 ifflag 0 CEOF 判断文件是否为空,为空的话,对输入字符加密 printf请输入要加密的字符串n; scanfs,s; mstrlens; /*对输入的字符串加密*/ fprintfsource,s,s; 将输入字符输出至source文件中 fori0;im;i static int a0; ifapassword.wd Nsipassword.psan-48; ifN122 NN122; fputcN,result; 将加密内容输出入result中 a; else fputcsi,result; 将加密内容输出入result中 else 文件非空,对文件加密 wCpassword.ps0n-48; fputcw,result; 将加密结果输出至result文件中 for i0;cfgetcsource EOF;i static int a1; ifapassword.wd Ncpassword.psan-48; ifN122 NN122; /*模运算*/ fputcN,result; out.putN; a; else fputcN,result; printfn加密成功n; 关闭文件 fcloseresult; fclosesource; systempause;void decode /*解密*/ FILE * recall recall.txt,wt; /*以写方式打开文件*/ FILE * result result.txt,rt; /*以读方式打开文件*/ char c,N; 临时变量 int nstrlenpassword.ps, i; n存储加密字符串长度,i为临时变量 文件存在性判断 ifresult NULL printf不存在 result.txt 文件n; exit0; ifrecall NULL printf不存在 result.txt 文件n; exit0; for i0;cfgetcresult EOF;i 对加密文件进行译码 static int a0; ifapassword.wd Nc-password.psan-48; ifN0 NN122122; /*模运算*/ fputcN,recall; else ifN0 fputcz,recall;将解密结果输出至recall文件 else fputcN,recall; a; else fputcN,recall ; printfn解密成功n; 关闭文件 fcloseresult; fcloserecall; systempause;void cmptxt /*比较解密文件和原始文件的一致性,一致输出原字符,不一致输出-*/ 在程序中没有调用 /*以读方式打开文件*/ FILE *source sourse.txt,rt; 打开原始文件 FILE *result result.txt,r; FILE *recall recall.txt,rt; 打开解密文件 char c,d; 临时字符存储变量 ifsource NULL 文件存在性判断 printf不存在 source.txt 文件n; exit0; /* ifresult NULL printf不存在 result.txt 文件n; exit0; */ ifrecall NULL 文件存在性判断 printf不存在 recall.txt 文件n; exit0; c fgetcsource; 先从原始文件读出一个字符,若不是文件结尾,则文件内容非空 d fgetcrecall; 先从解密文件读出一个字符,若不是文件结尾,则文件内容非空 ifc EOF 文件内容为空,输出加密字符 printf读文件错误n; exit0; ifd EOF 文件内容为空,输出加密字符 printf读文件错误n; exit0; printf文件比较; ifc d printfc,c; else printf-; whilecfgetcsource EOF cfgetcsource EOF 文件非空调用判断 ifc d printfc,c; else printf-; printfn; /*下面是文件关闭操作*/ fclosesource; fcloseresult; fcloserecall; systempause; void menu 主菜单 printfnn; printf1.设置加密方法n; printf2.加密n; printf3.解密n; printf4.显示文件n; printf5.退出n; printfnn; printf请选择;void main int a0; /*FILE *f1 source.txt,wt; 创建文件FILE *f2 result.txt,wt; FILE *f3 recall.txt,wt;fclosef1; fclosef2;fclosef3; 关闭文件*/menu; while a5 scanfd, switcha case 1 set; 调用设置加密方法函数 systemcls; 清楚屏幕上的字符,是屏幕更整洁 menu; break; case 2 encode; 调用加密函数 systemcls; menu; break; case 3 decode; 调用解密函数 systemcls; menu; break; case 4 printtxt; 显示原始文件与目标文件 systemcls; menu; break; case 5 printfn谢谢使用nn; break; default printfn输入错误 请再次输入n; systemcls; menu; break; 六、测试数据及其结果分析测试数据记录请输入需要加密的内容the*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择1输入加密字符串496输入加密字节数3请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择2加密成功请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择3解密成功请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择4原始文件the加密文件xqk解密文件the请按任意键继续原文件为空时*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择1输入加密字符串496输入加密字节数3请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择2请输入需要加密的字符串the加密成功请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出解密成功请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择4加密字符串ddd加密文件uzw解密文件ddd请按任意键继续*1.设置加密方法2.加密3.解密4.显示文件5.退出请选择5谢谢使用分析将本程序五个选项每个进行测试,其中测试字符串the为原始文件中部分字符串,进行加解密处理后进行对比;而后用字符串ddd测试字符串不是原始文件字符的情况,后经文件对比,能够正常运行,所以此程序成功。七、调试过程中的问题 在这个编程中,如果你在设计时存在逻辑错误,虽然源代码没错,不过在运行时就有问题,在调试中前后函数的功能要对应,要不然就不能正确运行,还有一些基本的符合不符合规范,注意英文字母的书写。八、课程设计总结通过这个C语言程序的编写,我遇到了许多问题,如有些源代码的运用不是很清楚,这个加密解密处理文件比较大,处理起来比较麻烦,不过通过我与同学们的讨论以及查阅资料,在草稿纸上进行算法的书写,终于把他搞定,让我明白团队的力量,更重要的是怎么学习,要懂得不懂就要问,懂得吃苦了,比如我在调试的过程中就遇到了问题,不过我一个一个的,慢慢的进行下去,这是我收获最大的了哟,学C要多练了。九

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值