密码学课程设计论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
一、课程设计的内容
运用C语言、C++面向对象、数据结构以及刚学习的密码学等知识,在认真学习古典密码的理论知识之后,通过编程进行各类古典密码的算法的实现,并产生界面友好。
二、课程设计的要求与数据
论文摘要包括,摘要正文和关键词,课程设计正文(绪论(说明做这个课题的意义)、理论部分(相关的理论)、代码的实现部分、总结)三、课程设计应完成的工作
各类古典密码算法的编写
程序MFC的关联
论文的撰写(目录的自动生成)
四、应收集的资料及主要参考文献
论文摘要:
本文主要对古典密码中的移位密码(凯撒密码),仿射密码,维吉利亚(Vigenere)密码以,单表代换密码,置换密码和周期置换密码进行算法设计,最后用C++方法实现友好界面。通过对这几个古典密码的算法分析,更加系统的掌握其中的原理和应用。
关键词凯撒密码、置换密码、算法、MFC关联、代码
目录
第1章绪论 (3)
第2章理论部分 (3)
2.1:移位密码 (4)
2.2:仿射密码 (4)
2.3:维吉利亚密码 (4)
2.4:一般的单表代换密码 (4)
2.5:列置换密码 (4)
2.6:周期置换密码 (4)
第3章代码的实现 (5)
3.1:程序主界面: (5)
3.2 移位密码: (5)
3.3 仿射密码 (6)
3.4 维吉利亚密码 (9)
3.5 单表代换密码 (12)
3.6 置换密码 (15)
3.7 周期置换密码 (16)
第4章总结 (18)
第5章参考文献 (19)
第1章绪论
密码学包括两部分,即密码编码学和密码分析学,这两个部分即对立又统一,正是由于其对立性才促进了密码学的发展。一个密码系统的安全性只有通过对该系统抵抗当前各类攻击能力的考查和全面分析才能做出定论。密码体制的安全性分析是一个相当复杂的问题,但有一点是清楚的,那就是掌握现有的分析方法并使用这些方法对相应的体制进行分析以考察其安全强度。
在密码编码体制中,有两种最基本也是最古老的编码体制一直沿用至今,它们是代换密码和置换密码,由于历史悠久并且是现代密码体制的基本组成部分,因而在密码学中占有重要的地位。古典密码是密码学发展的一个阶段,也是近代密码学产生的渊源,尽管古典密码大多比较简单,一般可用手工或机械方式实现其加密和解密过程,破译也比较简单,目前已经很少采用,但了解它们的设计原理,有助于理解、设计和分析现代密码。
日常生活中,在大多数的情况下,我们不用担心别人偷听,因为即使被人偷听到了他也无法用偷听到的信息做什么坏事。但当我们谈论某些比较敏感的话题时,被别人偷听到的话可能会产生一些负面的影响,对当事人很不利。在文字交流中,一些重要的信息,比如重要决定,人事变动和秘密情报等,当事人是不希望别人看到的,但如何进行交流呢?一个简单的办法就是采用文字编码。
例如,将英文中的每个字母固定地换成它后面第5个字母,A换成F,B换成G,…,V换成A,W换成B,…,最后Z换成E。字母编码如下表所示:
原文 A B C D …V W X Y Z
密文 F G H I … A B C D E 因此,消息I love you就变成了n qtaj dtz,消息有明确的信息,而编码后的字符串却是一串乱码,信息隐藏在其中,达到了保密的效果。
对于古典密码体制而言,我们有如下的约定:加密解密时忽略空格和标点符号,这可能让人不太适应,但是经过解密后,几乎总是可以正确的还原明文中的这些空缺。如果保留这些空缺,密文会保持明文的结构特点,为攻击者提供便利。
本文主要是通过对各类型的古典密码进行算法设计,通过编写程序来深层掌握古典密码的算法技术,通过对各类型古典密码进行详细的分析,分工讨论,在实现系统掌握这些密码算法的同时,也对C语言和C++面向对象进行了复习,有效的巩固了以前的知识,也培养了对专业密码学的学习兴趣。
第2章理论部分
代换是古典密码中用到的最基本的处理技巧,它在现代密码学中得到了广泛的应用,内容非常的丰富,人们采用代换密码进行加密时并没有固定的模式。按照一个明文字母是否总是被一个固定的字母代换进行划分时,代换密码可以分为两大类:(1)单表代换密码:对明文消息中出现的同一个字母,在加密时都用同一个固定的字母来代换,不管它出现在什么地方。移位密码和仿射密码都属于单表代换密码。
(2)多表代换密码:明文消息中出现的同一个字母,在加密时不是完全被同一个
固定的字母代换,而是根据其出现的位置次序,用不同的字母代换,如维吉利亚密码和Playfair密码。
2.1:移位密码
明文空间P与密文空间C都是26个英文字母的集合,密钥空间K={0,1,2,…,25}。在实际进行加密解密运算时,把26个字母依次与0,1,2,…,25对应。因而也可以说P=C=K={0,1,…,25}=Z。E={e:Z->Z,e(x)=x+k(mod 26)},即对每个K∈Z,相应的加密变换为ek(m)=m+k(mod 26),其中m∈Z为明文。D={d:Z->Z,d(x)=x-k(mod 26)},即对密钥k,解密变换为dk(y)=y-k(mod 26),其中y∈Z为密文。解密之后要把Z中的元素再变换为英文字母。
2.2:仿射密码
明、密文空间与移位密码相同,密钥空间为K={(k1,k2)|k1,k2∈Z,其中gcd(k1,26=1)} gcd表示两个数的最大公因子,gcd(k1,26)=1,即表示k1还 26互素。对任意的k=(k1,k2)∈K,加密变换为e(m)=k1*m+k2*(mod 26).相应的解密变化为d(c)=k1^(-1)*(c-k2)(mod 26),其中:k1*k1^(-1)=1(mod 26).
2.3:维吉利亚密码
该密码有一个参数n。在加解密时同样把英文字母用数字代替进行运算,并按n 个字母一组进行变换。明、密文空间及密钥空间都是n长的字母串的集合,因此可以表示P=C=K=Z^(26).加密变换如下:
设密钥k=(k1,k2,…,kn),明文P=(m1,m2,…,mn),加密函数为e(p)=(c1,c2,…,cn),其中Ci=(mi+ki)(mod 26),i=1,2,…,n。
对密文c=(m1,m2,…,mn),密钥k=(k1,k2,…,kn),解密变换为:e(c)=(m1,m2,…,mn),其中m1=(c1-k1)(mod 26),i=1,2,…,n。
其中mi=(ci-ki)(mod 26),i=1,2,…,n。
2.4:一般的单表代换密码
单表代换密码的原理是:以26个字母的集合上的一个置换∏为密钥对明文消息中的每个字母依次进行变换,变换的方法是把明文中的每个字母用它在置换∏下的像去替换。解密时用∏的逆置换进行替换。可描述为P=C={0,1,2,…,25}=Z,K={∏:Z->Z|∏是置换}。密钥∏对应的加密变换e(x)= ∏(x),解密变换为d(y)= ∏^(-1)(y).前面描述的移位密码和仿射密码都是单表代换密码,而维吉利亚密码不是单表代换密码。
2.5:列置换密码
置换密码是把明文中各字符的位置次序重新排列来得到密文的一种密码体制。列置换密码的加密方法如下:把明文字符以固定的宽度m(分组长度)水平地(按行)写在一张纸上,按1,2,3,…,m的一个置换∏交换列的次序位置,再按垂直方向(按列)读出即得密文。解密就是就是将密文按照相同的宽度m垂直的写在纸上,按置换∏的逆置换交换列的位置次序,然后水平的读出得到明文,置换∏就是密钥。
2.6:周期置换密码