文件移位加密与解密系统C课程设计.doc

上传人:啊飒飒 文档编号:10387454 上传时间:2021-05-13 格式:DOC 页数:33 大小:314KB
返回 下载 相关 举报
文件移位加密与解密系统C课程设计.doc_第1页
第1页 / 共33页
文件移位加密与解密系统C课程设计.doc_第2页
第2页 / 共33页
文件移位加密与解密系统C课程设计.doc_第3页
第3页 / 共33页
文件移位加密与解密系统C课程设计.doc_第4页
第4页 / 共33页
文件移位加密与解密系统C课程设计.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《文件移位加密与解密系统C课程设计.doc》由会员分享,可在线阅读,更多相关《文件移位加密与解密系统C课程设计.doc(33页珍藏版)》请在三一文库上搜索。

1、程序设计综合课程设计报告 计算机学院计算机科学与技术专业程序设计综合课程设计报告 (20010/2011学年 第一学期)学生姓名: 学生班级: 学生学号: 指导教师: 2011年01月08日文件移位加密与解密系统目 录第一章.课程设计目的和要求11.1设计目的:11.2 设计要求:1第二章.课程设计任务内容2第三章.详细设计说明33.1模块描述33.2 性能33.3 输入项33.4输出项33.5算法43.7接口133.8数据文件存储说明133.9注释设计133.10限制条件133.11测试计划1414第四章.软件使用说明17第五章.课程设计心得与体会18附录1:参考文献20附录2:源代码213

2、0第一章.课程设计目的和要求1.1设计目的:1、 提高程序设计和分析的能力。2、 深入了解c+程序设计的知识与技巧.3、 进一步掌握c+程序设计的思想.4、 初步了解程序加密与解密的思想.1.2 设计要求:1、 完整的理解课程设计任务的要求.2、 用C语言实现系统.3、 函数功能要划分好(结构化程序设计).4、 设计的程序结构完整、简明、可读性强.5、 界面友好(良好的人机交互),加必要的注释.6、 设计的程序调试成功,能稳定的运行.7、 提供程序测试方案.8.列出参考的文献和完整的程序清单.第二章.课程设计任务内容设计一个文件加密与解密的程序,主要功能主要包括以下内容:1.文件加密:设计三种

3、加密算法2.文件解密。3.实现主函数和子函数之间的参数传递.第三章.详细设计说明3.1模块描述该模块是一个简单完整的程序,主要包括3个算法。其功能是将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥或密码(用户从键盘输入)将对应字符进行加密、解密操作并输出结果。3.2 性能 (1)要求有较快的运算速度,能很快的执行函数功能; (2) 要求程序运行稳定,无误; (3) 要求程序有良好的人机互动.3.3 输入项 包括以下内容:(1)要加密的字符窜s,其类型为string类型。(2)加密密匙或密码key;其中密匙为int类型,密码为string类型。(3)解密密匙或密码key1;(4)执

4、行操作与否的判断 y/n;其类型为字符型。 所有的输入均有用户由键盘输入。3.4输出项 包括以下内容:(1)必要的提示数据:中文和*号;(2)已加密的密文和解密后的明文;其类型均为string类型. 所有输出项都由显示器输出。3.5算法3.5.1单表移位算法:就是明文的一个字符用相应的一个密文字符代替。加密过程中是从明文字母表到密文字母表的一一映射。例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表移动5位(注:z后接a)可得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文

5、abcdef。凯撒密码就是单表代替密码,它的每一个明文字符都由其右边第3个(模26)字符代替(A由D代替,B由E代替,W由Z代替,X由A代替,Y由B代替,Z由C代替)。单表代替密码是很容易破译的,因为它没有把明文的不同字母的出现频率掩盖起来。可以使用统计攻击。3.5.2多表移位算法:多表代替密码有多个单字母密钥,每一个密钥被用来加密一个明文字母。第一个密钥加密明文的第一个字母,第二个密钥加密明文的第二个字母等等。在所有的密钥用完后,密钥又再循环使用,若有20个单个字母密钥,那么每隔20个字母的明文都被同一密钥加密,这叫做密码的周期。维吉尼亚密码是多表代替密码的例子。例如:加密时,将每个字符的a

6、scll码依次反复加上“2011”(密码, 由用户自由输入)中的数字,并在32( )122( z)之间做摸运算。 3.5.3置换算法(行列换位法)算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码也叫换位密码。如矩阵换位密码。它的加密方法是将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,形成密文。行列换位法采用密钥,假设密钥是5,明文是I am a Chinese boy那么就会以5位列数排成一个矩阵。 I a m a c h i n e s e b o y 那么密文就是ihe aib mno aey cs

7、,最后一行不足的用随机字母填充,(代表那个随机字母)!先加密后解密开 始charc100;key0N密匙输入错误!Yreturn;才【i=0i96&ci64&ci91YYNci=(ci+key65)%26+656565;结 束不需解密!解密完成!!rsp.empty()&rsp0!=n加密完成!;i+YNY图3-5-1 单表移位算法流程图 图3-5-2多表移位算法流程(1)图3-5-2 多表移位算法流程图(2)图3-5-3 置换算法流程图(1)图3-5-3 置换算法流程图(2)图3-5-3 置换算法流程图(3)3.6 函数主程序流程char i=0;开始i !=4单表移位算法选择算法YNi=1

8、i=2break;退出i=4置换算法i=3多表移位算法YNYNY 结 束Yreturn0; 图3-6 主函数流程图3.7接口 本程序是一个独立的程序,并无上下接口。3.8数据文件存储说明 本程序中数据皆为一次性数据,不进行数据的存储操作。3.9注释设计 在各个变量和各个函数后都附加了注释。3.10限制条件 本程序只适合vc+平台。3.11测试计划 图3-11-1程序测试运行结果 图3-11-2程序测试运行结果 图3-11-3程序测试运行结果 图3-11-4程序测试运行结果 图3-11-5程序测试运行结果 图3-11-6程序测试运行结果经过不同测试,本程序运行良好,运算速度基本达到要求。第四章.

9、软件使用说明本程序仅适用于vc+平台,可以将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位简单的加密、解密操作。 第五章.课程设计心得与体会 3周的程序设计就要结束了,我的设计成果也就要完成了。回想这三周的学习设计历程,突然间想到了很多。 刚拿到设计题目的时候,觉得挺简单的,马上就有了思路,但当我真正去设计的时候才发现困难重重,突然间才意识到学到的知识太少了,真是“书到用时方恨少”。当我明白自己的知识有多么匮乏时,我开始行动起来寻找帮助,图书馆,上网,问同学等等。而在寻找帮助的过程中,我更是深深的意识到:知识是无穷尽的! 在设计的过程中有很多的

10、困难,有些通过上网查资料,问同学基本上能解决,但也有些困难解决不了。这时候是老师给我指明了道路,让我豁然开朗。现在想想,终于体会到了“导师”的含义。 程序设计完成后,最重要的任务是写程序报告。这却是让我体会最深的。首先,程序报告的格式让我明白了什么叫“最正确的”。报告格式的内容很多,大大小小方方面面都要注意,其实做人,做事也是如此,细节决定成败。见微知著,报告格式的严谨也让我想到,如果学习有这么严谨的态度,怎会没有成就? 通过这次的程序设计,我学到了很多,也明白了很多。最深的感触是:“其实,人都是逼出来的!”。 以前觉的课程设计那么难,怎么可能完成呢,现在成果就在眼前,突然发现自己的潜力有多么

11、深,如果以前上课时都能这么努力,学习怎么可能不好? 这次的程序设计让我感到自己要学的还真的很多,也让我明白该如何去掌握如何学习新知识的能力。以前一直觉得课本里的知识已经很够用了,现在才发现自己学到的真得太少,真的是见大海方知天地广。还有就是知识的迁移能力太差了,明明就是课本上的知识却感觉棘手,以后要重点培养自己的知识运用能力。最后就是,发现学习知识的途径是很多的,并不是局限于学校,老师,其实,网络是一个巨大的资源库,合理利用会让我学到很多的知识。 总之,这次的程序设计让我看到了自己的差距,也明白了以后要努力的目标,真正体会到了学习的含义。附录1:参考文献1 C+语言程序设计 作者:谭浩强 出版

12、社 清华大学出版社 出版日期:20042 C+ Primer中文版(第4版) 作者: Stanley B.Lippman, Josee Lajoie, Barbara E.Moo 译者: 李师贤 蒋爱军 梅晓勇 林瑛 出版社 人民邮电出版社 出版日期: 2006-03-313 C+语言程序设计 作者: 蒋爱军 刘红梅 王泳 梁小萍 出版社 人民邮电出版社 出版日期: 2008-05-294 C+必知必会 作者: Stephen C.Dewhurst 译者: 荣耀 出版社 人民邮电出版社 出版日期: 2010-11-155 C+编程规范:101条规则、准则与最佳实践 作者: Herb Sutte

13、r, Andrei Alexandrescu 译者: 刘基诚 出版社 人民邮电出版社 出版日期: 2010-11-15 6 写给大家看的C+书 作者: Larry Ullman, Andreas Signer 译者: 杨涛 王建桥 杨晓云 出版社 人民邮电出版社 出版日期: 2009-06-15附录2:源代码/ Note:Your choice is C+ IDE#include #include #include #include #include using namespace std;void Shift();void Vigenere();void Permutation();int

14、main() char i = 0; while(i!=4) cout请选择您要进行的操作:endl;cout*Press 14 to choose:*n;cout1:单表移位算法;endl; cout2:多表移位算法;endl; cout3:置换算法;endl; cout4:退出;endl; coutendl; i = getch();if(i=1)cout$endl; coutendl; cout您选择的是单表移位算法:endl; Shift(); coutendl; cout$endl; coutendl; else if(i=2)cout$endl; coutendl; cout您选择

15、的是多表移位算法:endl; Vigenere(); coutendl; cout$endl; coutendl; else if(i=3)cout$endl; coutendl; cout您选择的是置换算法:endl; Permutation(); coutendl; cout$endl; coutendl;else if(i=4)cout您选择退出.endl;break; return 0;void Shift( )char c100;char s100;int length, i=0, key=0;/输入要加密的字符窜和密匙。 cout请输入要加密的字符窜: endl; /cin.get

16、();gets(c);strcpy(s,c);length = strlen(c); coutkey;/验证密匙。if(key0) cout密匙输入错误!endl; coutPress any key to return.; getchar(); return;/加密过程。for(i=0; i96&ci64&ci91)ci = (ci+key-65)%26+65;cout加密完成!密文为:endl;coutcendl;/解密过程。 string rsp;coutrsp;if(!rsp.empty() & rsp0 != n)cout解密完成!原文为:endl;couts;coutendl; e

17、lse cout已确认,不需解密!endl;void Vigenere() /输入要加密的字符串和密码。string p; coutp; const string password=p; cin.ignore(100,n); string s,s1,s2; cout请输入要加密的字符串:122) s1i=s1i%122+32; +j; if(j=password.size() j=0; cout加密后的字符串:s1endl; /解密过程。 string rsp; do coutpsw; s2=s1; for(i=0,j=0;i!=s2.size();+i) s2i-=pswj-0; if(s2

18、i32) s2i=s2i+122-32; +j; if(j=psw.size() j=0; if(s2=s) cout解密成功,解密后的字符串:s2endl;break; ; if(s2!=s) cout密码错误,解密失败!endl; coutrsp; while (!rsp.empty() & rsp0 != n); /置换算法#define CODELEN 256 /*密文长度.*/char *encode(char *dest,char *str,int key) int i,j,len,len2,n=0; len=strlen(str); if(len % key)!=0) len2=

19、len+ key-(len % key); else len2=len; srand(time(NULL); for(i=len;ilen2;i+) stri=(char)(rand() % 26) + (rand() % 1)*(A-a)+a); strlen2=0; for(j=0;jkey;j+) for(i=0;ilen2/key;i+) destn+=stri*key+j; destn=0; strlen=0; return dest;char *decode(char *dest,char *str,int key) int i,j,len,n=0; len=strlen(str)

20、; if(len % key)!=0) return NULL; len=len / key; for(i=0;ilen;i+) for(j=0;jkey;j+) destn+=strj*len+i; destn=0; return dest;void Permutation()string s1,s2; int key,i,j,len; char strCODELEN,sCODELEN; char xstrCODELEN; /输入要加密的字符窜和密匙。 cout请输入要加密的字符窜:endl; gets(str); strcpy(s,str); coutkey; coutendl; /输出原始铭文和加密密文。 cout原始明文:strendl; encode(xstr,str,key); cout加密密文:xstrendl; /解密。 string rsp;coutrsp;if(!rsp.empty() & rsp0 != n)cout解密完成!endl;cout原文为:s;coutendl; else cout已确认,不需解密!endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1