凯撒密码的加密和解密_第1页
凯撒密码的加密和解密_第2页
凯撒密码的加密和解密_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、无关于凯撒密码的实现原理关于凯撒密码的实现原理班级:姓名:学号:指导老师:一、一、设计要求说明设计要求说明1、 设计一个凯撒密码的加密和解密的程序设计一个凯撒密码的加密和解密的程序,要求输入一段字符和密码要求输入一段字符和密码,输出相应的密文输出相应的密文,完成加密过程完成加密过程;若输入被加密的密文及解密密钥,能还原出原文,完成解密。若输入被加密的密文及解密密钥,能还原出原文,完成解密。2、 语言不限,工具不限,独立完成,参加答辩。语言不限,工具不限,独立完成,参加答辩。3、 严格按照格式的要求完成文档,在第六部分的运行结果分析中,要求抓图说明。严格按照格式的要求完成文档,在第六部分的运行结

2、果分析中,要求抓图说明。二、二、基础知识介绍基础知识介绍凯撒密码的历史凯撒密码的历史凯撒密码(caeser)是罗马扩张时期朱利斯凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种“密表”给他的朋友写信。这里所说的密表,在密码学上称为“凯撒密表”。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那 26 个拉丁字母。因此,凯撒密表就是用 d 代 a,用

3、e 代 b,用 z 代 w。这些代替规则也可用一张表格来表示,所以叫“密表”。基本原理基本原理在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含 2 个相同的元素。密钥和协议(算法)。凯撒密码的密钥是 3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。凯撒密码的加密算法极其简单。其加密过程如下:在这里,我们做此约定:明文记为 m,密文记为 c,加密变换记为 E(k1,m)(其中 k1 为密钥) ,解

4、密变换记为 D(k2,m)(k2 为解密密钥) (在这里 k1=k2,不妨记为 k) 。凯撒密码的加密过程可记为如下一个变换:cm+k mod n(其中 n 为基本字符个数)同样,解密过程可表示为:mc+k mod n(其中 n 为基本字符个数)对于计算机而言,n 可取 256 或 128,m、k、c 均为一个 8bit 的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要 255 次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。加密解密算法加密解密算法恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个

5、固定数目的位置。例如,当偏移量是左移 3 的时候(解密时的密钥就是 3) :明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ恺撒密码的加密、解密方法还能够通过同余数的数学

6、方法进行计算。首先将字母用数字代替,A=0,B=1,.,Z=25。此时偏移量为 n 的加密方法即为:无E (x)= (x+n) mod 2解密就是:D (x)= (x-n) mod 2三、三、环境介绍环境介绍编程语言编程语言C 语言编译环境编译环境Microsoft Visual Studio 2010操作系统操作系统Windows ,四、四、思路以及算法分析思路以及算法分析定义两个字符数组 char p1000和 char c1000,用来存放明文和密文。定义一个 key,表示移位的个数。这是加密解密的关键。综合考虑到在密表尾部的字母加密或解密的时候会循环移动到密表头部, 所以加密、 解密语

7、句分别为:ci=(pi-a+key)%26+a向后移动 keypi=z-(z+key-ci)%26向前移动 key五、五、源程序代码源程序代码#includevoid main()char p1000;char c1000;int key,i,m;key=5;/*定义一个移位个数为 5,即加密向右移 5 位,解密则相反*/printf(please input the Plaintext: n);gets(p);/*读取字符串,直至接受到换行符停止,并将读取的结果存放在 p1000中。换行符不作为读取串的内容,读取的换行符被转换为 null 值,并由此来结束字符串。*/for(i=0;pi!=

8、0;i+)ci=(pi-a+key)%26+a;/*加密算法,所有明文符号由向右移 5 位的密文代替*/ci=0;printf(the Ciphertext is:n%sn,c);/*输出加密后的密文*/printf(please input the Ciptertext:n);gets(c);/*读取字符串,直至接受到换行符停止,并将读取的结果存放在 c1000中。换行符不作为读取串的内容,读取的换行符被转换为 null 值,并由此来结束字符串。*/for(i=0;ci!=0;i+)pi=z-(z+key-ci)%26;/*解密算法,所有明文符号由向左移 5 位的明文代替*/pi=0;pri

9、ntf(the Plaintext is:n%sn,p);/*输出解密后的明文*/无return;六、六、运行结果分析运行结果分析试对明文试对明文 security 进行加密,再将其解密:进行加密,再将其解密:输入明文 security:回车后,输出加密后的密文:xjhzwnyd无输入 security 的密文“xjhzwnyd” :回车后出现解密后的明文 security:无七、七、总结与不足总结与不足程序是在几个小时内测试运行成功的。凯撒密码是密码学中,一种最简单的加密算法。原理并不复杂,只要理解了,实现起来并不困难。程序并不长,基本实现了对于凯撒密码的加密和解密过程。但其中还存在很多不足,比如,这段代码并没有给出当遇到空格或者别的符号的处理方法,又比如代码只给出了当字符是在 a 到 z 的情况下的解决方法,而从 A 到 Z 则没有给出等等。因此,还有很多地方还可以进行改进:1.可以在开始设置一个选择,是进行加密还是解密;2.可以将 key 设为一个整型变量,在程序运行开始时,需要用户输入 key 值,再根据 key 值进行加密解密。这样,凯撒密码就可以变得更加灵活。总体来说,从开始编写、修改凯撒密码的程序到最终调试成功,还算比较顺利,也体会到了一点密码

温馨提示

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

评论

0/150

提交评论