




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计成果说明书题 目: 文件加密 学 生 姓 名: 贺 典 学 号: 131335120 院 系: 达内IT学院 班 级: C13达内 指 导 教 师: 姚晓秋 东海科学技术学院课程设计成绩评定表20 13 20 14 学年 第 二 学期学院 东海科学技术学院 班级 C13达内 专业 达内IT 学生姓名(学 号) 贺典(131335120)课程名称面向对象程序设计应用实训题 目文件加密指导教师评语指导教师签名: 年 月 日答辩评语及成绩答辩小组教师签名: 年 月 日东海科学技术学院课程设计任务书20 13 20 14 学年 第 二 学期学院 东海科学技术学院 班级 C13达内 专业 达内IT 学生姓名(学号)贺典(131335120)课程名称面向对象程序设计应用实训设计题目文件加密的一些简单算法完成期限自 2014 年 6 月16日至2009年7月4日 共 3 周设计依据文件加密是一种根据要求在操作系统层自动地对写入存储介质的数据进行加密的技术。本软件能对一个文本文件进行加密和解密。设计要求及主要内容本程序是运用MFC(vc6.0)进行编写,主要运用以下几个方面的知识:使用文件输入流从指定路径和名称的磁盘中读取指定的txt 文本,对文本内容加密后重新输出到原文件中。能够实现对txt文本的加密与解密操作,加密后的文本不应具有可读性,解密后的文本以保持原有的大小、格式,不应有文本行或字符、字符串的丢失。参考资料1 钱能.C+程序设计教程.清华大学出版社.20132 严蔚敏 陈文博编著.数据结构及应用算法教程.清华大学出版社. 2008.3C+ Primer (第四版) .人民邮电出版社.指导教师签字日期2014.6.10摘要文件加密数据防泄漏的必要性及重要性在信息时代,信息安全问题越来越重要。我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。解决这个问题的方式就是文件加密来保证数据防泄漏。一个加密网络,不但可以防止非授权用户的搭线窃听和入网,而且也是对付恶意软件的有效方法之一。有些时候用户可能需要对一些机密文件进行加密,不一定因为要在网络上进行传输该文件,而是担心有人窃取计算机口令而获得该机密文件。身份认证是基于加密软件技术的,作用为用来确定用户是否是真实的。在传输过程中对数据进行加密,可以保障数据在传输过程中安全。网络安全所要求的保密性、完整性、可用性,都可以利用密码技术来实现。可以说,密码技术是保护大型通信网络上传输信息的实用手段之一。本文主要介绍有文本文件加密及解密的算法,按照上述的编程范式,介绍了需要哪些类,类中包含哪些数据成员,每个类需要提供怎样的一组操作,类和类之间继承关系如何表示。主要分为5个部分,第一部分介绍了选题及需求分析;第二部分介绍了概要设计;第三部分结束了详细设计需要考虑的问题;第四部分介绍了重要的代码;第五部分课程设计的总结。【关键词】面向对象设计,加密,解密,算法目 录目录摘要1一、设计任务与要求3设计任务3设计要求3二、实现思想:31使用文件输入输出流iofstream32.加密操作33.解密操作34. 加密函数AL_Lock的实现思想35. 解密函数LA_Key的实现思想36. 加密解密序列的生成3三、软件设计41.程序运行基本结果截图4(1)程序运行时主界面与操作选择4(2)文本win7.txt加密前5(3)加密时界面显示和相关信息5(4)文本win7.txt加密后6(5)解密时的输入界面6(6)解密时界面显示7(7)文本win7.txt解密后72.源程序清单与注释8int strLen8int char2int8char * strCopy8char * strSort8int * getNum9char * strSort10int * getNum10char * Line_Lock10char * Line_Key11char * Aph_Lock11char * Aph_Key12char * AL_Lock12char * LA_Key13void main()13/将处理后的文件复制回原文件中155 课程设计总结15参考文献16一、设计任务与要求设计任务使用文件输入流从指定路径和名称的磁盘中读取指定的txt文本,对文本内容加密后重新输出到原文件中。设计要求能够实现对txt文本的加密与解密操作,加密后的文本不应具有可读性,解密后的文本以保持原有的大小、格式,不应有文本行或字符、字符串的丢失。二、实现思想: 1使用文件输入输出流iofstream从指定路径的txt文件中读取数据,使用文件输入流的getline函数从原文件每次读取一行作为一个字符串写入字符串缓存空间szTmp中。2.加密操作:对缓存字符串szTmp使用自定义的加密函数AL_Lock进行加密操作,将加密后的字符串写入一个临时文件txtLocker.tmp中保存,待整个文本文件读取并加密完成后,将加密后的文件从临时文件txtLocker中逐个字符复制回原文件中,并对将缓存文件清空。3.解密操作:使用文件输入输出流逐行读取加密后的文件,到字符串缓存空间szTmp中,对字符串szTmp 使用自定义的解密函数LA_Key进行解密操作,直到文件解密完成;解密操作完成后,将解密后的文件写回原文件中。4. 加密函数AL_Lock的实现思想:AL_Lock包含两个自定义的加密函数Line_Lock和Aph_Lock 。对字符串进行加密时,有两种基本的加密思想。其一是对字符串中的各个字符按照一个给定的顺序进行换序加密操作。如:字符串”abcdef”字符序列”326154”加密后为”cbfaed”。此程序中自定义的加密函数Line_Lock就是用于实现此功能。另一种加密思想是对字符序列进行逻辑移位加密,加密数值增加到字符的ASCII码值中。如字符序列”abcde”按字符序列”11211”进行逻辑移位加密后字符串为”bceef”。 此程序中自定义的加密函数Aph_Lock就是用于实现此功能。AL_Lock加密函数为这两种加密思想结合使用构建的加密函数,先使用逻辑移位加密函数Aph_Lock进行加密,在使用换序加密函数Line_Lock对其进行加密。5. 解密函数LA_Key的实现思想:解密函数为加密函数的逆过程,先使用解密函数Line_Key对加密后的字符串进行原来顺序的恢复操作,再使用逻辑移位解密函数Aph_Key对恢复原序的字符串进行逻辑解密操作。 6. 加密解密序列的生成,给定任意一个字符串序列如:”7415369”按字符由小到大的顺序逐个字符给定其对应位置产生字符串序列”3524617”该序列即为换序加密时可用的加密序列使用Line_Lock即可对字符加密。在此程序中用于生成加密序列的函数为getNum。 而产生的加密序列经字符串数据转换函数char2int转换后转换为整型数据,利用除3取得的余数作为逻辑移位的产生序列。三、软件设计 1.程序运行基本结果截图(1)程序运行时主界面与操作选择(2)文本win7.txt加密前(3)加密时界面显示和相关信息(4)文本win7.txt加密后(5)解密时的输入界面(6)解密时界面显示(7)文本win7.txt解密后2.源程序清单与注释#include/基本输入输出流#include/文件输入输出流#define ANum1 3000#define ANum2 3500/ strLen 求字符串求长函数 求任意长度字符串的长度int strLen(char str)int i = 0;while(stri+);return i;/char2int 转换, 将字符串数str,转换为整型数,如:“123457”-123457int char2int(char str)int Total = 0, i=0, int Tmp;while(stri)Tmp = stri+-48;/Tmp用于存储字符串各个字节处转换后的的数字si-48,转换前该字节处用si表示该数字字符Total = Total * 10 +Tmp;/将各位数字字合成字符所表示的数据return Total;/返回数字处理后得到的数字/strCopy 字符串拷贝函数,将字符串从源文件str1拷贝到目标文件str2,返回值str2所对应的字符串char * strCopy(char str2, const char str1)int i = 0;while(str1i) str2i = str1i+;str2i = 0;return str2;/strSort 对字符串内字符排序函数,对str1排序后存储到str2中,str1保持不变,返回值str2char * strSort(char str1, char str2)/需包含strCopy、strLen两个构造函数strCopy(str2, str1);char Tmp;for(int i=0; i strLen(str2)-2; i+)for(int j=i+1; j str2j)Tmp = str2i;str2i = str2j;str2j = Tmp;return str2;/getNum 字符串自动生成列序函数,根据输入的字符串大小数序依次取出对应的列号存放到Num数组中,如:getNum(95423, Num),可得列序Num=4,5,3,2,1int * getNum(char str, int Num)/需包含strLen、strSort两个构造函数 文本加密时使用,使用此列序加密文本int countk, countj;char TmpANum1;strSort( str, Tmp);/对Tmp里的字符按从小到大排序for(int i=0; i strLen(str)-1; i+)countj=0;for(int j=0; j strLen(str)-1; j+)if(Tmpi = strj)/Tmp中某一个字符与str中的某个字符相同时 countj+;/countj 用于计数str中第几个字符与Tmpi相同,故每次i循环计数前时清为0Numi=j+1;int k=i;countk=1;while(Tmpk- = Tmpk-1) countk+;/countk 用于计数Tmp中多少个相同的字符,故每次计数前清为1if(countj=countk) j=strLen(str)-1;/当Tmp中第几个相同的字符与str中第几个相同的字符对应时退出循环return Num;/strSort 对字符串内字符排序函数,对str1中字符按Num里给的字符顺序进行排序,Len为Num数组的元素个数char * strSort(char str, int Num, int Len)/需包含strLen、strCopy两个构造函数int j, i, CMi=strLen(str)-2;/因为在使用gets获取一整行字符串时最后一位是字符结尾0,倒数第二位是换行符也要排除在字符长度之外不能参与字符排序交换char TmpANum1;/ANum1需给定for(i=0; i (CMi/Len)*Len; i+)/选取str的Len的整数倍进行交换if(i%Len=0) j=0;Tmpi = str(i/Len)*Len+(Numj+-1);for(i; i CMi+1; i+)/选取str的Len的余数部分原样拷贝,多加一位将倒数第二位的换行符也拷贝上if(i%Len=0) j=0;Tmpi = stri;Tmpi=0;/为字符串添加结尾strCopy(str, Tmp);return str;/getNum 数组自动生成列序函数,根据输入数组中数据的大小数序依次取出对应的列号存放到Num数组中,如:getNum(1,5,4,2,3, Num),可得列序Num=1,4,5,3,2/数组Num1中元素需从1开始连续且不相同,Len1为数组Num1中元素个数int * getNum(int Num1, int Num2, int Len1)/用于对给定的列序数组再次求列序,文本解密时使用,使用此列序还原文本for(int i=0; iLen1; i+)for(int j=0; jLen1; j+)if(Num1j=i+1) Num2i=j+1;return Num2;/Line_Lock 字符串列序锁函数,对str中的字符按key中字符密码换序加密/key中存放任意字符密码,对符合列排序大小关系的密码均可解密char * Line_Lock(char str, char key)/需包含函数两参数的Get_Nu、三参数的strSortint keyTmpANum1;getNum(key, keyTmp);strSort(str, keyTmp, strLen(key)-1);return str;/Line_Key 字符串列序匙函数,对str中的字符按key中字符密码换序解密/key中存放任意字符密码,对符合列排序大小关系的密码均可解密char * Line_Key(char str, char key)/需包含函数两参数的getNum、三参数的getNum、三参数的strSortint keyTmp1ANum1, keyNTmpANum1;getNum(key, keyTmp1);getNum(keyTmp1, keyNTmp,strLen(key)-1);strSort(str, keyNTmp, strLen(key)-1);return str;/Aph_Lock 字符串字母锁函数,对str中的字符按key中字符密码逻辑移位加密/key中存放任意字符密码char * Aph_Lock(char str, char key)/需包含函数两参数的strLenfor(int i=0; i=A & striZ) stri = t-26;/字符0对应整数48,若加字符后大于Z则-26,使其依然属于AZelse stri = t;if(stri=a & striz) stri = t-26;/字符0对应整数48,若加字符后大于z则-26,使其依然属于azelse stri = t;if(stri=0) stri=9;if(stri 0) stri+=y;return str;/Aph_key 字符串字母锁函数,对str中的字符按key中字符密码换序加密/key中存放任意字符密码char * Aph_Key(char str, char key)/需包含函数两参数的strLenfor(int i=0; i=A & stri=Z)/判断字符是否属于AZ,是则有可能是大写字母t= stri-(keyk+-47);if(t =a & stri=z)/判断字符是否属于az,是则有可能是大写字母t= stri-(keyk+-47);if(t a) stri =t+26;/字符0对应整数48,若减字符后小于a则+26,使其依然属于azelse stri = t;if(stri=0) stri-=y;return str;/AL_Lock 字符串列序锁函数,对str中的字符按key中字符密码换序加密/key中存放任意字符密码,对符合列排序大小关系的密码均可解密char * AL_Lock(char str, char key)/需包含函数Aph_Lock、Line_LockAph_Lock(str, key);Line_Lock(str, key);return str;/LA_Key 字符串列序锁函数,对str中的字符按key中字符密码换序加密/key中存放任意字符密码,对符合列排序大小关系的密码均可解密char * LA_Key(char str, char key)/需包含函数Aph_Lock、Line_LockLine_Key(str, key);Aph_Key(str, key);return str;void main()int lable=1, Select, totalSize, lineNum;char tmp;char finame256;/定义输入字符串finame用于存放源文件的完整路径和名称char foname256=C:WINDOWStemptxtLocker.tmp;/将文件处理的结果先缓存到textLocker.tmpchar szTmpANum1, keyANum1;ifstream fin;/(ifstream:input file stream)定义一个文件输入流对象fin,从文件中输入数据 参见C+程序设计pag300ofstream fout;/定义一个文件输出流对象fout,输出数据到文件中doSelect=0; totalSize=0; lineNum=0;docoutn-n;couttxt文本加密器, 请选择操作n;coutn1.加密 2.解密Enter键确认;coutSelect;while(Select!=1 & Select!=2);docoutn请输入要加密文件的完整路径名称n如:d:1.txt;coutfiname;fin.open(finame);/用文件输入流打待处理文件finameif(!fin) coutn要加密的文件打开失败n;/偌输入的文件完整路径名称不正确则给出提示信息while(!fin);/直到输入的文件完整路径名称正确时继续进行下面的操作fout.open(foname);/用文件输出流打开文件foname,没有则创建,有则清空if(!fout) coutn系统盘空间可能不足,文件foname创建失败n; return;if(Select=1)coutn请输入加密的密码: ;else if(Select=2)coutkey;if(Select=1)while(fin.getline(szTmp, ANum1-1, n)/从待加密的文件中读取一行,存储到字符串szTmp中,每行字符串的最大长度为ANum1-1,读取时每行仅读到字符n停止,该字符不存到szTmp中lineNum+;AL_Lock(szTmp, key);/对字符串szTmp用key进行加密foutszTmpendl;/将加密后的字符串szTmp输出到输出文件foname中coutszTmpendl;/写入文件的同时输出至屏幕进行显示totalSize += strLen(szTmp);/统计每个字符串的字符数,计算文件的大小else if(Select=2)while(fin.getline(szTmp, ANum1-1, n)lineNum+;LA_Key(szTmp, key);/对字符串szTmp用key进行解密foutszTmpendl;/将解密后的字符串szTmp输出到文件foname中coutszTmpendl;totalSize += strLen(szTmp);coutn-n;if(Select=1) coutn文本加密完毕;else if(Select=2) coutn文本解密完毕;coutn此文本有lineNum行,共 totalSize/1024+1KB;fin.close();/关闭两个打开的文件fout.close();/-/将处理后的文件复制回原文件中fin.open(foname);fout.open(finame);while(fin.get(tmp)/从输入文件foname中逐个字符读取数据,写入tmp中fout.put(tmp);/将tmp写回到原文件finame中fin.close();/关闭两个打开的文件fout.close();fout.open(foname);/清空文件缓存中文件中的内容fout.close();/-coutn-n;coutlable;coutnnnnnnnnnnnnnnn;while(lable);5 课程设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过这次课程设计增加很多认识,在拿到课程设计题目时,没有像以前一样马上开始动手写代码,我先做了整体的分析,把要设计的类,类的数据成员,对这些数据成员可能进行的操作,以及类和类之间的关系理清楚,了解了设计的整体框架。在编写代码过程中,根据实现设计好的类及类的成员一步步进行,相对思
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东江门市台山市公有资产管理委员会办公室招聘编外人员1人备考考试题库附答案解析
- 外包工程质量管理协议
- 2025浙江宁波开投私募基金管理有限公司招聘4人备考考试题库附答案解析
- 2025年营口市老边区城管协勤人员招聘备考考试题库附答案解析
- 2025泉州银行福建厦门分行招聘备考练习试题及答案解析
- 2025黑龙江鸡西市对外交流服务中心招聘事业单位工作人员4人备考考试题库附答案解析
- 2025四川虹信软件股份有限公司招聘实施顾问等岗位9人备考考试题库附答案解析
- 2025年甘肃酒泉瓜州县人民法院聘用制工作人员招聘备考考试题库附答案解析
- 2026中远海运船员管理有限公司招聘备考考试题库附答案解析
- 创新生态协同机制-洞察及研究
- 公共安全危机应对的新模式探索
- 园区消防测试题及答案
- 员工社保补贴合同协议
- 爱永在 二部合唱简谱
- 培训课件 -面相识人 -识人秘籍内部资料
- 髋关节置换术后护理讲课
- 医务人员职业道德培训教育课件
- 山东医专综评试题及答案
- 2025年贵安新区产业发展控股集团有限公司招聘笔试参考题库附带答案详解
- 电子装修合同范文
- 高速公路改扩建工程监理投标方案(技术方案)
评论
0/150
提交评论