一款经典加密解密教学演示软件的开发毕业设计_第1页
一款经典加密解密教学演示软件的开发毕业设计_第2页
一款经典加密解密教学演示软件的开发毕业设计_第3页
一款经典加密解密教学演示软件的开发毕业设计_第4页
一款经典加密解密教学演示软件的开发毕业设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、陕西理工学院毕业设计 题 目 一款经典加密解密教学演示软件的开发 学生姓名 汤阳 学号 1318042022 所在学院 数学与计算机科学学院 专业班级 计算机科学与技术计专升本 1301 班 指导教师 李军 _ 完成地点 陕西理工学院 2015 年 6 月 4 日 陕西理工学院毕业设计 本科毕业设计任务书 院(系) 数学与计算机科学学院 专业班级 计算机科学与技术(专升本 1301) 学生姓名 汤阳 一、毕业设计题目 一款经典加密解密教学演示软件的开发 二、毕业设计工作自 2014 年 12 月 9 日 起至 2015 年 6 月 20 日止 三、毕业设计进行地点: 陕西理工学院 四、毕业设计

2、应完成内容及相关要求: 单码、多码以及多图加密技术在经典密码学中占据着及其重要的地位,也是 现代密码学的基础。要求设计一个演示软件,在该软件中能够用经典密码密码学中 的几个典型的加密解密算法对文本进行加密与解密。要求实现的功能: 1、实现仿射加密与解密 2、实现多文字加密与解密 3、实现 vigenere 密与解密 4、实现 hill 加密与解密 五、毕业设计应收集资料及参考文献: 1、搜集关于经典密码学相关资料; 2、收集教学演示软件开发的案例及相关经验。 六、毕业设计的进度安排: 至 2015-3-20 搜集文献材料,撰写开题报告 2015-3-20 至 2015-3-31 进行设计分析,

3、确定设计方案 2015-4-01 至 2015-4-15 概要设计,构思设计平台的整体框架 2015-4-16 至 2015-5-15 详细设计、搭建平台,编写代码 2015-5-15 至 2015-5-25 软件测试、系统完善 2015-5-26 至 2015-6-05 撰写毕业设计说明书 2015-6-06 至 2015-6-10 整理资料、准备答辩及答辩 2015-6-11 至 2015-6-20 资料完善工作 指导教师签名 专业负责人签名 学院领导签名 批准日期 陕西理工学院毕业设计 一款经典加密解密教学演示软件的开发一款经典加密解密教学演示软件的开发 汤阳 (陕西理工学院数学与计算机

4、科学学院计算机科学与技术计专升本 1301 班,陕西 汉中 723000) 指导教师:李 军 【摘要】为了在密码学教学过程中形象的展示加密解密这一过程,设计实现了一款经典加密解密教学演示软 件。该软件基于 microsoft visual c+ 6.0 集成开发环境,采用 c+面向对象程序设计方法,根据经典密码学中的 单码加密、多码加密以及多图加密算法,实现了经典密码学中的仿射加密法、多文字加密法、vigenere 加密法和 hill 加密法四种经典加密算法的教学演示效果。 【关键词】仿射加密法;多文字加密法;vigenere 加密法;hill 加密法 陕西理工学院毕业设计 the devel

5、opment of a classical encryption and decryption demo software for teaching tangyang (grade 13, upgraded class 1, major computer science and technology, school of mathematics and computer science .shaanxi university of technology, hanzhong 723000, shaanxi) tutor: li jun abstract: in order to show the

6、 process of encrypt and decrypt in the teaching of classical cryptography, a teaching demo software of a classical encryption and decryption was developed. according to the single code and multiple code encryption algorithm of classical cryptography, using object-oriented programming method, impleme

7、ntation of the affine encryption method, multiple text encryption method, vigenere encryption method and hill encryption method in microsoft visual c+ 6.0. key words: affine method; more text method; vigenere method; hill method 陕西理工学院毕业设计 目 录 1 课题实施的背景.1 2 仿射加密法.2 2.1 算法概述.2 2.2 算法分析.2 2.3 核心代码.2 3

8、 多文字加密法.4 3.1 算法概述.4 3.2 算法分析.4 3.3 核心代码.4 4 vigenere 加密法.7 4.1 算法概述.7 4.2 算法分析.8 4.3 核心代码.8 5 hill 加密法.12 5.1 算法概述.12 5.2 算法分析.13 5.3 核心代码.13 6 系统测试.17 6.1 仿射加密算法测试 .17 6.2 多文字加密算法测试 .17 6.3 vigenere加密算法测试.19 6.4 hill加密算法测试.19 总 结.21 致 谢.22 参考文献.23 科技外文文献.24 附录 a: 系统使用说明书.45 陕西理工学院毕业设计 第 0 页 共 45 页

9、 1 课题实施的背景 随着网络技术的发展,大量的数据需要在网络上进行传输,因此,信息安全受到了越来越广泛 的关注。近年来,我国数据窃取事件层出不穷,csdn、珍爱网、世纪佳缘、走秀等多家网站的用户 数据库被曝光在网络上,由于部分密码以明文方式显示,导致大量网民的个人信息泄露。继 csdn、 天涯社区用户数据泄露后,互联网行业一片人心惶惶,而在用户数据最为重要的电商领域, 也不断传出用户信息漏洞,漏洞报告平台乌云发布漏洞报告称,支付宝用户大量泄露,被用于网络 营销,泄露总量达 1200 万2300 万之多。天猫商城、支付宝和当当网也已被卷入其中。事实上, 选择一种合适的加密机制将能消除消费者的各

10、种信息安全隐患。 从古典密码学的研究到现代密码学的发展,密码学在我们生活中扮演着越来越重要的角色。但 由于密码学是神秘而富有冒险色彩的,它不仅仅是计算机科学的内容,因此,学习密码学必须具有 宽广的知识背景。加之,密码学是一个很抽象的东西,不容易理解,所以,学习经典密码学对于初 学者来说具有一定的困难与挑战,如果有一套介绍加密解密算法的软件将抽象转换为形象,这势必 要减少大量学习理解密码学知识的时间。因此,本课题开发和研究的意义在于能形象生动的展示出 经典密码学中单码、多码以及多图加密技术的加密和解密过程,有助于加强初学者对经典密码学的 理解。 陕西理工学院毕业设计 第 1 页 共 45 页 2

11、 仿射加密法 2.12.1 算法概述算法概述 经典单码加密法的一个形式称为仿射加密法。在传统仿射加密法中,字母表的字母被赋予一个 数字,仿射加密法的密钥为 025 之间的数字对(m,n),m 与 26 的最大公约数必须为 1。现在,假设 p 为明文字母的数字(译注:即该字母在字母表中对应的数字),c 为密文字母的数字,m-1为 m 的 乘法的逆元,n-1为 n 的加法的逆元,那么,这两个数字之间的关系可以用如下等式表示: 26 mod )(nmpc 26 mod )( 11 ncmp 由于传统的仿射加密算法只对 26 个字母进行加密,为了解决这一局限,对一般符号也能进行 加密,从而采用 asc

12、ii 码表作为加密参考,将模改为 95(注:ascii 码值有 128 个,由于前 33 个 为不可显示字符,因此在加密的过程中排除,故将模改为 95)。因此,明文字母的数字 p 与密文 字母的数字 c 之间的关系可表示为: 95 mod )(nmpc 95 mod )( 11 ncmp 2.22.2 算法分析算法分析 仿射加密法与单码加密替换没有什么不同,因为明文的每个字母分别只映射到一个密文字母。 例如,选取密钥为(2,7)。(由于 2 与 95 的最大公约数为 1,即 gcd(2,95)=1,则 2 可以作为密钥 中的 a)。因此,利用这个密钥,字“tangyang”可以使用放射加密法加

13、密。将“tangyang”转换 成数字 116、97、110、103、121、97、110、103,利用放射加密等式生成: c(t)=(2(116-32)+7)mod 95)+32=112,即为数字“p” c(a)=(2(97-32)+7)mod 95)+32=74,即为字母“j” c(n)=(2(110-32)+7)mod 95)+32=100,即为字母“d” c(g)=(2(103-32)+7)mod 95)+32=86,即为字母“v” c(y)=(2(121-32)+7)mod95)+32=122,即为字母“z” 注:由于 ascii 码表中前 33 个为不可显示字符,因此在加密运算过程

14、中明文字母 p 要先减去 32(ascii 码表中从 0 开始),求完模之后的结果再加上 32,这样,对于(2,7)这个密钥, “tangyang”加密后变成了“pjdvzjdv”。 计算可得(95i+1)/a=a-1,将“pjdvzjdv”转换成数字 112、74、100、86、122、74、100、86 利用放射解密等式生成: c(p)=(48(112-32)-7)mod 95)+32=116,即为字母“t” c(j)=(48(74-32)-7)mod 95) +32=97,即为字母“a” c(d)=(48(100-32)-7)mod 95) +32=110,即为字母“n” c(v)=(4

15、8(86-32)-7)mod 95) +32=103,即为字母“g” c(z)=(48(122-32)-7)mod 95) +32=110,即为字母“y” 这样,对于(2,7)这个密钥,“pjdvzjdv”解密后变成了“tangyang” 2.32.3 核心代码核心代码 /加密函数 cstring cfcpasswd:fcaddpass(cstring newtext,int a,int b) int n,i; char mida,c; n = newtext.getlength(); passwd = new charn; 陕西理工学院毕业设计 第 2 页 共 45 页 char *m_a

16、= newtext.getbuffer(newtext.getlength(); /将字符串转换成字符数组 newtext.releasebuffer(newtext.getlength(); for (i = 0;i newtext.getlength();i+) mida = m_ai - 32; c = (a * mida + b) % 95; passwdi = c + 32; passwdi = 0; newtext.format(%s,passwd); return newtext; int cfcpasswd:getfa(int a) /求 a 逆 int i,n; for (i

17、 = 1; i 95;i+) n = 95 * i + 1; if (n % a) = 0) return n/a; return -1; cstring cfcpasswd:fcrelesspass(cstring oldtext,int a,int b) int n,i,m_b; char p,mida; int fa = getfa(a); if(fa = -1) return ; n = oldtext.getlength(); obvious = new charn; char *m_a = oldtext.getbuffer(oldtext.getlength(); oldtext

18、.releasebuffer(n); for(i = 0; i n;i+) mida = m_ai - 32; m_b = mida - b; while (m_b 0) m_b = m_b + 95; p = (fa * m_b) % 95; obviousi = p + 32; obviousi = 0; oldtext.format(%s,obvious); return oldtext; 陕西理工学院毕业设计 第 3 页 共 45 页 3 多文字加密法 3.13.1 算法概述算法概述 多文字加密法是另一种脆弱的单码加密法,但是它与一般的单码加密法又有一些不同。因为它 是用一对字母来替代

19、每个明文字母,加密后的密文是明文的两倍大。 多文字加密法的密钥是一个 55 的矩阵。这个矩阵的 5 行和 5 列用含有 5 个字母的关键词来 标识,该关键词不能有重复的字母。字母表的每个字母填写在这个矩阵中。当然,矩阵只有 25 个 位置,而字母表有 26 个字母,因此字母“i”和“j”占同一个单元,这就意味着所有的“j”都变 成了“i”。 例如,如果关键词为 takes,那么密钥矩阵为: 表 3.1 密文、明文对照表 takes tabcde afghik klmnop eqrstu svwxyz 每个明文由标识该字母的行和列的字母对替代,加密过程为查找标识该字母的行和列的字母对 的过程。

20、解密过程则为反向查找矩阵的过程。 3.23.2 算法分析算法分析 在关键词为 takes,明文为 tangyang 的情况下,加密解密过程如下: 加密过程: 密文“ee”替代了明文的“t”,密文“tt”替代了明文的“a”,以此类推,明文“tangyang” 加密后的密文为”ee tt kk aa se tt kk aa”。 明文“t”替代了密文的“ee”,明文“a”替代了密文的“tt”,以此类推,密文“ee tt kk aa se tt kk aa ”解密后的明文为“tangyang”。 3.33.3 核心代码核心代码 /加密函数 cstring cmorewordpasswd:mwaddpa

21、ss(cstring newtext,cstring passkey) int textlen = newtext.getlength(); cstring result; int flag; /状态标志,1 表示明文字符在字母表范围之内,0 表示不在范围内 int i,j,k = 0,n = 0; passwd = new char2 * textlen; /密文数组 obvious = newtext.getbuffer(textlen); /明文数组 newtext.releasebuffer(textlen); char *chkey = passkey.getbuffer(passk

22、ey.getlength(); /密钥数组 passkey.releasebuffer(passkey.getlength(); while(k textlen) flag = 0; for(i = 0; i 5; i+) for(j = 0; j 5; j+) 陕西理工学院毕业设计 第 4 页 共 45 页 char mid = obviousk; if (mid = j) mid = i; if (arraykeyij = mid) passwdn = chkeyi; passwdn+1 = chkeyj; n = n + 2; flag = 1; break; if (flag = 0)

23、 passwdn = obviousk; n+; k+; passwdn = 0; result.format(%s,passwd); return result; /解密函数 cstring cmorewordpasswd:mwrelesspass(cstring oldtext,cstring passkey) int textlen = oldtext.getlength(); cstring result; int flag; int i,j,k = 0,n = 0; obvious = new chartextlen/2; passwd = oldtext.getbuffer(tex

24、tlen); oldtext.releasebuffer(textlen); char *chkey = passkey.getbuffer(passkey.getlength(); passkey.releasebuffer(passkey.getlength(); while(n textlen) flag = 0; for(i = 0;i 5;i+) if(passwdn = chkeyi) flag = 1; break; 陕西理工学院毕业设计 第 5 页 共 45 页 if(flag = 1) for(j = 0;j 5;j+) if(passwdn+1 = chkeyj) brea

25、k; if(flag = 0) obviousk = passwdn; k+; n+; if(flag = 1) obviousk = arraykeyij; k+; n = n + 2; obviousk = 0; result.format(%s,obvious); return result; 陕西理工学院毕业设计 第 6 页 共 45 页 4 vigenere 加密法 4.14.1 算法概述算法概述 vigenere 加密法不同于上面的两种加密法,它是一个著名的多码加密法。vigenere 加密法是 基于关键词的加密系统,但不是像单码关键词加法那样使用关键词来定义替换模式的。 vige

26、nere 加密法,关键词写在明文的上面,并且不断重复书写,这样每个明文字母都与一个 关键词的字母关联,例如,关键词为“make”,而明文为“tangyang”的情况下,关联词-明文的 关联如下所示: 表 4.1 密文、明文对照表 makemake t angyang 利用如图 4.1 所示的 vigenere 表,这些字母对就可以用来确定明文字符的加密结果。用密钥字母确 定表的行,而明文字母确定表的列,表中行列交叉处的字母就是用来替代明文字母的密文字母。 表 4.2 vigenere 表 abcdefghijklm n o p q rs tu v w x y z aabcdefghijklm

27、n o p q rs tu v w x y z bbcdefghijklm no p q rs tu v w x y z a ccdefghijklm nop q rstu v w x y z a b ddefghijklm nopq rstu v w x y z a b c eefghijklm nopqrstu v w x y z a b c d ffghijklm nopqrstu v w x y z a b c d e gghijklm nopqrstu vw x y z a b c d e f hhijklm nopqrstu vw xy z a b c d e fg iijklm

28、nopqrstuvw xy z a b c d e fg h jjklm nopqrstuvw xyza b c d e fg h i kklm nopqrstuvw xyza b c d e fg h ij llm nopqrstuvw xyza b c d e fg h ijk m m nopqrstuvw xyzab cd e fg h ijk l nnopqrstuvw xyzab cd e fg h ijk lm oopqrstuvw xyzab cd e fg h ijk lm n ppqrstuvw xyzabcd e fg h ijk lm n o qqrstuvw xyzab

29、cd efg h ijk lm n o p rrstuvw xyzabcdefgh ijk lm n o p q sstuvw xyzabcdefgh ijk lm n o p q r ttuvw xyzabcdefgh ijk lm n o p q r s uuvw xyzabcdefgh ijk lm n o p q r s t vvw xyzabcdefghijklm n o p q r s t u w w xyzabcdefghijklm n o p q r s t u v xxyzabcdefghijklm n o p q r s t u v w yyzabcdefghijklm n

30、 o p q rs t u v w x zzabcdefghijklm n o p q rs tu v w x y 陕西理工学院毕业设计 第 7 页 共 45 页 4.2 算法分析算法分析 在关键词为“make”,而明文为“tangyang”的情况下,关联词-明文的关联如下: 表 4.3 明文、密文对照表 密钥makemake 明文tangyang 加密过程:用密钥字母确定表的行,而明文字母确定表的列,表中行列交叉处的字母就是用来 替代明文字母的密文。对照 vigenere 表查找密文分析结果如下: 大写字母处理:首先将大写字母转换成小写字母,找到其密文后再将其转换成对应的小写字母。 在 vi

31、genere 表中查找“m”列和“t”行,找到结果密文字母“f”,重复这个过程,可以生成 以下的密文: 表 4.4 加密后的明文、密文对照表 密钥makemake 明文tangyang 密文faxkkaxk 则明文“tangyang”在关键词为“make”时,密文为“faxkkaxk”。 解密过程:要破译 vigenere 加密法,需要颠倒该查找过程。利用密钥和密文对,在 vigenere 中确定相应的明文。要实现这些,找到由密钥确定的行,扫描该行,直到找到密文字母,该密文字 母所在列的第一个字母就是明文字母。 例如将上述密文“faxkkaxk”解密。在 vigenere 表中查找“m”行中“

32、f”的位置所对列的第 一个字母,找到结果明文字母“t”,重复这个过程,则密文“faxhkaxh”解密后为“tangyang”。 4.34.3 核心代码核心代码 /加密函数 void cvienerepasswd:getpasskey(cstring text,char *result,int len) /构建与明文字符长度相同 的密钥数组 int n = len / text.getlength(); /text 为密钥,result 返回的结果,len 明文长度 int m = len % text.getlength(); char *strtext = text.getbuffer(te

33、xt.getlength(); text.releasebuffer(text.getlength(); strcpy(result,strtext); for (int i = 1; i n; i+) strcat(result,strtext); if (m = 0) return; else strcat(result,strtext); cstring cvienerepasswd:vigaddpass(cstring newtext,cstring passkey) 陕西理工学院毕业设计 第 8 页 共 45 页 int i = 26,j = 26,k; int flag = 0;

34、char chi,chj; cstring result; int textlen = newtext.getlength(); obvious = newtext.getbuffer(textlen); passwd = new chartextlen; newtext.releasebuffer(textlen); char *chpasskey = new chartextlen; getpasskey(passkey,chpasskey,textlen); for (k = 0; k 64 chj = obviousk + 32; else chj = obviousk; i = ge

35、tpassnum(chi); j = getpassnum(chj); if (j = 26 | i = 26) passwdk = obviousk; else if (flag = 1) passwdk = arraykeyij - 32; flag = 0; else passwdk = arraykeyij; passwdk = 0; result.format(%s,passwd); return result; 陕西理工学院毕业设计 第 9 页 共 45 页 int cvienerepasswd:getpassnum(char ch) for (int i = 0; i 26; i

36、+) if (arraynumi = ch) return i; return 26; /解密函数 cstring cvienerepasswd:vigrelesspass(cstring oldtext,cstring passkey) int flag = 0; int i = 26, j = 26, k, t; char chi,chj; cstring result; int textlen = oldtext.getlength(); passwd = oldtext.getbuffer(textlen); obvious = new chartextlen; oldtext.rel

37、easebuffer(textlen); char *chpasskey = new chartextlen; getpasskey(passkey,chpasskey,textlen); for (k = 0; k 64 chj = passwdk + 32; else chj = passwdk; i = getpassnum(chi); for (t = 0; t 26; t+) if (arraykeyit = chj) break; if (t = 26) 陕西理工学院毕业设计 第 10 页 共 45 页 obviousk = passwdk; else if (flag = 1)

38、obviousk = arraynumt - 32; flag = 0; else obviousk = arraynumt; obviousk = 0; result.format(%s,obvious); return result; 陕西理工学院毕业设计 第 11 页 共 45 页 5 hill 加密法 5.15.1 算法概述算法概述 hill 加密法是经典多图加密法的一种,要成功使用多图加密法,需要将数学方法应用到密码学 中去,hill 提出了一种基于联立方程的加密算法。该加密算法将含有 m 个字母的明文块加密成含有 m 个字母的密文块。每个明文字母被赋予一个数值,通常是 a=0,b=

39、1,z=25,但 hill 使用的是随 机赋值,块中每个字母的数值一起用来生成一组新的数值,这些数值就用来表示密文字母。例如, 如果 m=3,那么 3 个明文字母的数值(假设为p1,p2和p3)将通过如下的方程组转换成密文数值 c1,c2和 c3: 26mod)(c 3132121111 pkpkpk 26mod)(c 3232221212 pkpkpk 26mod)(c 3332321313 pkpkpk 该加密法的密钥是 kij值,取模操作的意思是将和除以 26,得余数。 确定密钥后将明文字母转换成数字形式,带入以上方程组,解方程组,得出密文的数值。再将 这些数值转换回字母后,就得到其密文

40、。 由于传统的 hill 加密算法只对 26 个字母进行加密,为了解决这一局限,对常用符号也能进行 加密,从而采用 ascii 码表作为加密参考,将模改为 95(注:ascii 码值有 128 个,由于前 33 个 为不可显示字符,因此在加密的过程中排除,故将模改为 95)。因此,上述关系方程组可表示为: 95mod)(c 3132121111 pkpkpk 95mod)(c 3232221212 pkpkpk 95mod)(c 3332321313 pkpkpk 最简单的方法是使用矩阵。加密密钥是矩阵 m,则解密密钥是 m-1。 要使这个过程可行,则密钥矩阵必须是可逆的,因此密钥值不可随机选

41、取。可以用数学方法表 示 hill 加密的一般形式。密钥写成一个 mm 的可逆矩阵形式: k = nmnn m kkk kkk k kk 21 22221 1m1211 将明文分成块,每个块含 m 个字母,用 m1 的向量表示。例如,第 i 块含有字符 p1,p2, ,pm,写成如下形式: bi = m p p . p 2 1 那么密文就由如下计算结果确定: = m c c . c 2 1 nmnn m kkk kkk k kk 21 22221 1m1211 m p p . p 2 1 陕西理工学院毕业设计 第 12 页 共 45 页 5.25.2 算法分析算法分析 hill 加密法中,密钥

42、矩阵越大,该加密法抗击能力就越强,即越不容易被破解。其破解过程 跟仿射加密法的破解过程类似,即用已知明文密文组建方程组,求解该方程组后,就可以找到其 密钥矩阵。 例如,选取密钥矩阵为 44 可逆矩阵, ,明文为“tang”。 411610 9485 10596 5968 k 首先,找到明文的 ascii 码值:116、97、110、103,再给其减去 32(由于 ascii 码表中前 33 个为不可显示字符,因此在加密运算过程中明文字母 pij要先减 32(ascii 码表中从 0 开始), 求完模之后的结果再加上 32。将这些数值代入以上方程组得出密文的数值: c1=(8(116-32)+6

43、(97-32)+9(110-32)+5(103-32) mod 95)+32=61 c2=(6(116-32)+9(97-32)+5(110-32)+10(103-32) mod 95)+32=36 c3=(5(116-32)+8(97-32)+4(110-32)+9(103-32) mod 95)+32=118 c4=(10(116-32)+6(97-32)+11(110-32)+4(103-32) mod 95)+32=124 将这些值转化回字母后,就是密文=$v|。 计算可得密钥矩阵的逆矩阵 94652894 946892 144542 1742092 k 1 - 计算步骤与加密步骤相同

44、,将这些数值代入以上方程组得出明文的数值: c1=(92(61-32)+20(36-32)+74(118-32)+1(124-32) mod 95)+32=116 c2=(2(61-32)+54(36-32)+44(118-32)+1(124-32) mod 95)+32=97 c3=(2(61-32)+89(36-32)+6(118-32)+94(124-32) mod 95)+32=110 c4=(94(61-32)+28(36-32)+65(118-32)+94(124-32) mod 95)+32=103 将这些值转化回字母后,就是明文“tang”。 5.35.3 核心代码核心代码 /

45、加密函数 cstring chillpasswd:hilladdpass(cstring newtext) int i = 0,j = 0; int textlen = newtext.getlength(); int n = textlen/4; int less = textlen % 4; obvious = newtext.getbuffer(textlen); newtext.releasebuffer(textlen); passwd = new chartextlen; while(i n) 陕西理工学院毕业设计 第 13 页 共 45 页 passwdj = (arraykey

46、00 * (obviousj - 32) + arraykey01 * (obviousj+1 - 32) + arraykey02 * (obviousj+2 - 32) + arraykey03 * (obviousj+3 - 32) % 95 + 32; passwdj+1 = (arraykey10 * (obviousj - 32) + arraykey11 * (obviousj+1 - 32) + arraykey12 * (obviousj+2 - 32) + arraykey13 * (obviousj+3 - 32) % 95 + 32; passwdj+2 = (arra

47、ykey20 * (obviousj - 32) + arraykey21 * (obviousj+1 - 32) + arraykey22 * (obviousj+2 - 32) + arraykey23 * (obviousj+3 - 32) % 95 + 32; passwdj+3 = (arraykey30 * (obviousj - 32) + arraykey31 * (obviousj+1 - 32) + arraykey32 * (obviousj+2 - 32) + arraykey33 * (obviousj+3 - 32) % 95 + 32; j = j + 4; i+

48、; if (less = 1) passwdj = obviousj; if (less = 2) passwdj = obviousj; passwdj+1 = obviousj+1; if (less = 3) passwdj = obviousj; passwdj+1 = obviousj+1; passwdj+2 = obviousj+2; passwdtextlen = 0; cstring result; result.format(%s,passwd); return result; /解密函数 cstring chillpasswd:hillrelesspass(cstring

49、 oldtext) int i = 0,j = 0; int textlen = oldtext.getlength(); int n = textlen/4; int less = textlen % 4; passwd = oldtext.getbuffer(textlen); oldtext.releasebuffer(textlen); obvious = new chartextlen; while(i n) 陕西理工学院毕业设计 第 14 页 共 45 页 obviousj = (arraynkey00 * (passwdj - 32) + arraynkey01 * (passw

50、dj+1 - 32) + arraynkey02 * (passwdj+2 - 32) + arraynkey03 * (passwdj+3 - 32) % 95 + 32; obviousj+1 = (arraynkey10 * (passwdj - 32) + arraynkey11 * (passwdj+1 - 32) + arraynkey12 * (passwdj+2 - 32) + arraynkey13 * (passwdj+3 - 32) % 95 + 32; obviousj+2 = (arraynkey20 * (passwdj - 32) + arraynkey21 *

51、(passwdj+1 - 32) + arraynkey22 * (passwdj+2 - 32) + arraynkey23 * (passwdj+3 - 32) % 95 + 32; obviousj+3 = (arraynkey30 * (passwdj - 32) + arraynkey31 * (passwdj+1 - 32) + arraynkey32 * (passwdj+2 - 32) + arraynkey33 * (passwdj+3 - 32) % 95 + 32; j = j + 4; i+; if (less = 1) obviousj = passwdj; if (

52、less = 2) obviousj = passwdj; obviousj+1 = passwdj+1; if (less = 3) obviousj = passwdj; obviousj+1 = passwdj+1; obviousj+2 = passwdj+2; obvioustextlen = 0; cstring result; result.format(%s,obvious); return result; void chillpasswd:setarray(int array4) int i, j; for (i = 0; i 4; i+) for (j = 0; j 4;

53、j+) arraykeyij = arrayij; 陕西理工学院毕业设计 第 15 页 共 45 页 void chillpasswd:setnarray(int array4) int i, j; for (i = 0; i 4; i+) for (j = 0; j in c+ can be written self-. c+objective-c class foo int x; int y; void f(void); ; void foo:f(void) x = 1; int y; /making ambiguity with this-y y = 2; /using local y

54、this-y = 3; /disambiguating interface foo : nsobject int x; int y; -(void) f; end implementation foo -(void) f x = 1; int y; /making ambiguity with this-y y = 2; /using local y self-y = 3; /disambiguating end 3.3.4 prototyp e id and signature, overloading a function is a part of code that can be ref

55、erenced, for instance to use as function pointers, orfunctors. moreover, even if the name of the function is a good candidate for a unique id, onemust take care when using overloading. c+ and objective-c use opposite ways to differentiateprototypes. the first is based on parameters types, while the

56、second is based on parameter labels. in c+, two functions can have the same name as long as their parameters have different types. when using methods, the const option is also discriminative. c+ int f(int); int f(float); /ok, float is different from int class foo 陕西理工学院毕业设计 第 28 页 共 45 页 public: int

57、 g(int); int g(float); /ok, float is different from int int g(float) const; /ok, const is discriminative ; class bar public: int g(int); /ok, we are in bar:, different from foo: in objective-c, all functions are c functions: they cannot be overloaded (unless the compilercan be told to use c99; like

58、gcc does). however, methods use a different syntax, and can bedifferentiated thanks to parameter labels. objective-c int f(int); int f(float); /error : c functions cannot be overloaded interface foo : nsobject -(int) g:(int) x; -(int) g:(float) x; /error : this method is not different / from the pre

59、vious one (no label) -(int) g:(int) x :(int) y; /ok : two anonymous labels -(int) g:(int) x :(float) y; /error : not different from the /previous one -(int) g:(int) x andy:(int) y; /ok : second label is andy -(int) g:(int) x andy:(float) y; /error : not different from the /previous one -(int) g:(int

60、) x andalsoy:(int) y; /ok : second label is /andalsoy, different from andy end the label-based identifying method is useful for expressing the exact “name” of the function, as stated below. interface foo : nsobject /the method name is g -(int) g; /the method name is g: -(int) g:(float) x; /the metho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论