凯撒密码的加密和解密

2022-04-10 19:33:15   文档大全网     [ 字体: ] [ 阅读: ]

#文档大全网# 导语】以下是®文档大全网的小编为您整理的《凯撒密码的加密和解密》,欢迎阅读!
凯撒,解密,加密,密码
关于凯撒密码的实现原理

班级: 姓名: 学号: 指导老师:

一、 设计要求说明

1 设计一个凯撒密码的加密和解密的程序,要求输入一段字符和密码,输出相应的密文,完成加密过程;

若输入被加密的密文及解密密钥,能还原出原文,完成解密。 2 语言不限,工具不限,独立完成,参加答辩。

3 严格按照格式的要求完成文档,在第六部分的运行结果分析中,要求抓图说明。 二、 基础知识介绍 凯撒密码的历史

凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。

古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种密表给他的朋友写信。这里所说的密表,在密码学上称为凯撒密表。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那26个拉丁字母。因此,凯撒密表就是用da,用eb……,用zw。这些代替规则也可用一张表格来表示,所以叫密表 基本原理

在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。

凯撒密码的加密算法极其简单。其加密过程如下:

在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)k2为解密密钥)(在这里k1=k2,不妨记为k凯撒密码的加密过程可记为如下一个变换: cm+k mod n (其中n为基本字符个数) 同样,解密过程可表示为:

mc+k mod n (其中n为基本字符个数)

对于计算机而言,n可取256128mkc均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。 加密解密算法

恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3 文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,A=0B=1...Z=25。此时偏移量为n的加密方法即为:

E (x)= (x+n) mod 2 解密就是:

D (x)= (x-n) mod 2


三、 环境介绍 编程语言

C语言 编译环境

Microsoft Visual Studio 2010 操作系统

Windows ,

四、 思路以及算法分析

定义两个字符数组char p[1000]char c[1000],用来存放明文和密文。 定义一个key,表示移位的个数。这是加密解密的关键。

综合考虑到在密表尾部的字母加密或解密的时候会循环移动到密表头部,所以加密、解密语句分别为:

c[i]=(p[i]-'a'+key)%26+'a' 向后移动key p[i]='z'-('z'+key-c[i])%26 向前移动key

五、 源程序代码 #include void main() {

char p[1000]; char c[1000]; int key,i,m;

key=5; /*定义一个移位个数为5,即加密向右移5位,解密则相反*/ printf("please input the Plaintext: \n");

gets(p); /*读取字符串,直至接受到换行符停止,并将读取的结果存放在p[1000]中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。*/ for(i=0;p[i]!='\0';i++)

c[i]=(p[i]-'a'+key)%26+'a'; /*加密算法,所有明文符号由向右移5位的密文代替*/ c[i]='\0';

printf("the Ciphertext is:\n%s\n",c); /*输出加密后的密文*/ printf("please input the Ciptertext:\n");

gets(c); /*读取字符串,直至接受到换行符停止,并将读取的结果存放在c[1000]中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。*/ for(i=0;c[i]!='\0';i++)

p[i]='z'-('z'+key-c[i])%26; /*解密算法,所有明文符号由向左移5位的明文代替*/ p[i]='\0';

printf("the Plaintext is:\n%s\n",p); /*输出解密后的明文*/ return; }

六、 运行结果分析

试对明文security进行加密,再将其解密: 输入明文 security

回车后,输出加密后的密文:xjhzwnyd 输入security的密文“xjhzwnyd




回车后出现解密后的明文security 七、 总结与不足

程序是在几个小时内测试运行成功的。凯撒密码是密码学中,一种最简单的加密算法。原理并不复杂,只要理解了,实现起来并不困难。程序并不长,基本实现了对于凯撒密码的加密和解密过程。但其中还存在很多不足,比如,这段代码并没有给出当遇到空格或者别的符号的处理方法,又比如代码只给出了当字符是在az的情况下的解决方法,而从AZ则没有给出等等。因此,还有很多地方还可以进行改进:1.可以在开始设置一个选择,是进行加密还是解密;2.可以将key设为一个整型变量,在程序运行开始时,需要用户输入key值,再根据key值进行加密解密。这样,凯撒密码就可以变得更加灵活。总体来说,从开始编写、修改凯撒密码的程序到最终调试成功,还算比较顺利,也体会到了一点密码学的趣味。 八、 参考文献

[1]步山岳,张有东.计算机信息安全技术,200517 [2]

[3] 2009/05/03/4145759.aspx [4] [5]


本文来源:https://www.wddqxz.cn/423d361db04e852458fb770bf78a6529657d35e9.html

相关推荐