1 / 11
文档名称:

凯撒密码的加密和解密.doc

格式:doc   大小:5,060KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

凯撒密码的加密和解密.doc

上传人:916581885 2021/8/2 文件大小:4.94 MB

下载得到文件列表

凯撒密码的加密和解密.doc

文档介绍

文档介绍:
: .
凯撒密码的加密和解密
LT
《计算机数据安全》课程
《计算机数据安全》课程
《计算机数据安全》课程
《计算机数据安全》课程
对于计算机而言,n可取256或128,m、k、c均为一个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=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 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:
五、 总结与不足
程序是在几个小时内测试运行成功的。凯撒密码是密