置换密码与凯撒密码加解密程序实现

上传人:笛音 文档编号:25747333 上传时间:2017-12-17 格式:DOC 页数:10 大小:253KB
返回 下载 相关 举报
置换密码与凯撒密码加解密程序实现_第1页
第1页 / 共10页
置换密码与凯撒密码加解密程序实现_第2页
第2页 / 共10页
置换密码与凯撒密码加解密程序实现_第3页
第3页 / 共10页
置换密码与凯撒密码加解密程序实现_第4页
第4页 / 共10页
置换密码与凯撒密码加解密程序实现_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《置换密码与凯撒密码加解密程序实现》由会员分享,可在线阅读,更多相关《置换密码与凯撒密码加解密程序实现(10页珍藏版)》请在金锄头文库上搜索。

1、1昆明理工大学城市学院学生实验报告 ( 2012 2013 学年 第 2 学期 )课程名称:信息安全 开课实验室:德信楼 308 2013 年 5 月 8 日、5 月 15 日年级、专业、班测控1111学号201111852XXX 姓名 成绩实验项目名称 置换密码与凯撒密码加解密程序实现 指导教师张晶教师评语 该同学是否了解实验原理: A.了解 B.基本了解 C.不了解该同学的实验能力: A.强 B.中等 C.差 该同学的实验是否达到要求: A.达到 B.基本达到 C.未达到实验报告是否规范: A.规范 B.基本规范 C.不规范实验过程是否详细记录: A.详细 B.一般 C.没有 教师签名:

2、年 月 日2一、实验目的及内容学会置换密码、凯撒密码加解密算法的编程实现二、实验原理及基本技术路线欲加密的数据称为明文,明文经过某种加密算法后转换成密文,加密算法中使用的参数称之为加密密钥;密文经解密算法作用后形成明文,解密算法也有一个密钥,这两个密钥可以相同也可以不相同。密文在网络传输中可能会被窃听,特别是在无线通信中,所有传输信息是外露的,但是由于窃听者不知道解密的方法,安全可得到相对保护。密码通信的一条基本原则是,必须假定破译知道通用的加密方法,也就是说加密算法E 是公开的。这种假设是合理的也是必要的,因为事实上任何一种加密算法都不可能做到完全的保密,其次一个加密算法在被公开之后仍要能经

3、得起攻击才能称得上是一个合格的、强壮加密算法。另外只有在对加密算法进行不断的研究、攻击和改进中,密码学才能得到发展。既然加密算法是可能公开的,那么真正的秘密就在于密钥了,也就是说,密钥是必须保密的,它通常是一个字符串,并且可以按需要进行频繁的更换,因此以下将讨论是模型是加密算法是公开的且相对稳定,而作为参数的密钥是保密的,并且是易于更换的。在这里密钥的长度很重要,因为找到了解密密钥也就破译了密码,而密钥长度越长,密钥空间就越大,破译密钥所花的时间就越长,破译的可能性就越小。从破译者的角度来看,密码分析所面对的问题有三种主要的变型:当仅有密文而无明文时,我们称之为“只有密文”问题;当已有了一批相

4、匹配的明文与密文时,称之为“已知明文”问题;当能够加密自已所选的明文时,称为“选择明文”。从这三种角度来看,如密码系统仅能经得起“只有密文”的攻击还不能算是真正的安全,因为破译者完全可能从统计学的角度与一般的通信规律中猜测出一部分的明文,从而就会拥有一些相匹配的明文与密文,从而全部解密。因此,真安全的密码通信系统应是,即使破译者拥有了一些匹配的明文与密文,也无从破译其它密文。通常情况下,加密公式 CEK(P)表示明文经加密算法 E 和加密钥 K 作用后转换成密文 C,并有关系:PDK(EK(P)。3三、所用仪器、材料(设备名称、型号、规格等或使用软件)硬件要求:最少应该满足一个班一次完成实验的

5、计算机数目(大约 60 台) 。软件要求:Windows XP 作为操作系统,需要 WinTC 软件。四、实验方法、步骤(或:程序代码或操作过程)1、置换密码程序代码:#include#include#include#define N 100int main()int i,j,lenK,lenM,m,n,temp;int TN;char KN,MN,CN,Temp1N,Temp2N,Temp3N;printf(This is a substitution cipher.n);printf(Please input the M:n);gets(M);printf(Please input the

6、 K:n);gets(K);lenK=strlen(K);lenM=strlen(M);m=lenM/lenK;n=lenK;for(i=0;ilenK;i+)temp=0;for(j=0;jlenK;j+)if(int)Ki(int)Kj)temp+=1;Ti=lenK-temp;printf(%d ,Ti);printf(nnFirst.nn);for(i=0;im;i+) for(j=0;jn;j+)4Temp1i*lenK+j=Mi*lenK+j;printf(%c ,Temp1i*lenK+j);printf(n);Temp1lenM=0;printf(nSecond.nn);for

7、(i=0;ilenK;i+)for(j=0;jm;j+)Temp2j*lenK+i=Temp1j*lenK+Ti-1;Temp2lenM=0;for(i=0;im;i+)for(j=0;jlenK;j+)printf(%c ,Temp2i*lenK+j);printf(n);printf(nThird.nn);for(i=0;ilenK;i+)for(j=0;jm;j+)Temp3j*lenK+i=Temp2j*lenK+Ti-1;Temp3lenM=0;for(i=0;im;i+)for(j=0;jlenK;j+)printf(%c ,Temp3i*lenK+j);printf(n);pri

8、ntf(The substitution cipher is.n);for(j=0;jlenK;j+)for(i=0;im;i+)5printf(%c,Temp3i*lenK+j);return 0; 2、凯撒密码程序代码:67五、实验过程原始记录( 测试数据、图表、计算等)1.置换密码置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为 attack

9、begins at five,密钥为 cipher,将明文按照每行 6 个字母的形式排在矩阵中,形成如下形式: atckbeginstfve根据密钥 cipher 中各个字母在字母表中出现的先后顺序,给定一个置换: 123456f根据上面的置换,将原有居住中的字母按照第列、第裂、第裂、第裂、第列、第列的顺序排列,则有下面的形式: actkbingesvft从而得到密文:实验结果截图:(1)输入明文8(2)输入秘钥(3)明密文输出2.凯撒密码恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移 3 的时候(解密时的密钥就

10、是 3):明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,A=0 , B=1,.,Z=2

11、5 。此时偏移量为 n 的加密方法即为:E (x)= (x+n) mod 2 9解密就是: D (x)= (x-n) mod 2运行结果截图:六、实验结果、分析和结论置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为 attack begins at five,密钥为 cipher,将明文按照每行 6 个字母的形式排在矩阵中,形成如下形式:根据密钥 c

12、ipher 中各个字母在字母表中出现的先后顺序,给定一个置换:根据上面的置换,将原有居住中的字母按照第列、第裂、第裂、第裂、第列、第列的顺序排列,则有下面的形式:从而得到密文:其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由 密钥给出的矩阵置换产生新的矩阵,从而恢复明文。恺撒密码的基本原理是 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含 2 个相同的元素。密钥和协议(算法) 。凯撒密码的密钥是 3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生

13、成密文,即是敌人若获10取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。心得体会通过两周的实验,我自己的收获很多。不仅把之前所学的加密的的知识巩固了,同时也巩固了自己的 C 语言相关的知。通过和同学的交流和讨论以及向老师的请教,把之前很多没有弄懂的知识学会了,让我比较系统的掌握了古典密码的原理与程序实现。在做实验的过程中,不仅要用到课本的知识,还要到网上查阅相关的知识。这让我大大扩充自己的视野,培养了解决问题的能力。经常运用 C 语言编程,大大提高了自己的编程能力和动手能力。其实作为密码学的基础,各类型的古典密码的原理是很简单的,难的就是你要怎样把那些看起来简单的原理用计算机程序语言

14、进行实现,所以最重要的就是要动手。在实际的操作中会遇到很多的问题,这是就需要和同学互相商讨,或者是向老师请教,集思广益,想方设法的才能更好的把自己的思想应用到程序中去。这个过程让我真实的感受到编程给我带来的乐趣,同时所锻炼的动手能力也为我们以后的工作打下了坚实的基础。 在这次实验中也看到了自己的不足之处。对于 C 语言的很多知识都忘了,一开始做起来很困难,我想一定是自己以前对相应的知识点了解的不够清楚。在算法的实现中,对于一些细节方面的东西考虑的不到位,这要感谢各位同学对我的帮助和指导。 学习展望,通过这次课程设计,既让我更加系统的掌握了古典密码的相关原理和知识,为以后的学习打下了坚实的基础,同时也让我认识到了自己的不足,这就在客观上要求自己在以后的学习过程中更加努力。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号