凯撒密码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南通大学网络安全实验课

实验报告

学生姓名

所在院系

专业

学号

指导教师

南通大学

2014年 5 月

凯撒密码

一、概念与原理

它是一种代换密码。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。

如恺撒使用过的偏移量为3的这种密码,若明文为:

M=Casesar cipher is a shift substitution

则密文为

C=Fdvhvdu flskhu lv d vkliw vxevwlwxwlrq

二、实验内容与步骤

1、手动完成Caesar密码

(1)在实验原理部分我们已经了解了Caesar密码的基本原理,那么我们先写出当密钥k=3时,对应明文:data security has evolved rapidly的密文。

(2)进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击“Caesar密码”。在明文输入区输入明文:data security has evolved rapidly。将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。

请根据密钥验证密文与明文对应关系是否正确。

2、Caesar加密

(1)进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。

(2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值,并记下该密钥k值用于同组主机的解密。加密工作完成后,单击“导出”按钮将密文默认导出到Caesar 共享文件夹(D:\Work\Encryption\Caesar\)中,默认文件名为Caesar密文.txt。

(3)通知同组主机接收密文,并将密钥k通告给同组主机。

(4)单击“导入”按钮,进入同组主机Work\Encryption\Caesar目录(\\同组主机IP\Work\Encryption\Caesar),打开Caesar密文.txt。

(5)调节密钥k的微调按钮或对照表的移位按钮,将k设为同组主机加密时的密钥k 值,这时解密已经成功。

(6)将解密后的明文与同组主机记录的明文比较,请对比明文是否相同。

3、Caesar密码分析

(1)本机进入“密码工具”|“加密解密”|“Caesar密码”,在明文输入区输入明文(要求明文有一定的意义以便让同组主机分析)。

(2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值完成Caesar 加密,单击“导出”按钮,将密文默认导出到Caesar共享文件夹中。

(3)通告同组主机(不要通告密钥值k)密文已经放在共享文件夹中,让同组主机获

取密文。

(4)单击“导入”按钮将同组主机Caesar密文导入。

(5)调节密钥k的微调按钮或者对照表的移位按钮来调节密钥,从而进行密码分析(平均13次,最坏26次破解)。

(6)将破解后的密钥和明文与同组主机记录的密钥和明文比较。如果不同请调节密钥k继续破解。

三、使用C++实现凯撒密码加密解密

# include

# include

void main(void)

{

cout<<"\n";

cout<<" ***************凯撒密码*************** "<

for(int i=0;i<26;i++)

a[i]=char(65+i);

char s[64];

cout<<"\n***加密***\n"<

L1: cout<<"请输入明文:"<<"\a";

cin.getline(s,64);

for(int k=0;k

char w=s[k];

if(int(w)<65||int(w)>90)

goto L1;}

int key,key1;

cout<<"请输入您的密钥(必需是整数):";

cin>>key;

int g[64],l;

cout<<"所得的密文为:";

for(int h=0;h

g[h]=int(s[h]);

l=((g[h]-65)+key)%26;

cout<

}

cout<

cout<<"\n***解密***\n"<

cout<<"请输入您的密文:";

char q[64];

cin>>q;

cout<<"请输入您的密钥(必需是整数):";

cin>>key1;

int e[64],b;

cout<<"解密后的明文为:";

for(int v=0;v

e[v]=int(q[v]);

b=((e[v]-65)-key1+26)%26;

cout<

}

cout<

}

四、测试结果

五、总结与感受

凯撒密码是一种最简单且最广为人知的加密技术。小学的时候和同学就玩过用移位替换字母的方式来“写信”,但那时候还不知道我们用的就是一种凯撒密码。由于时间和水平有限,我的这段代码只能把大写字母进行明文和密文的转换,没有添加小写字母的部分。有时间我会再进行改进,争取将它编得更加完整。

相关文档
最新文档