古典密码与破译
一、实验目的及意义
本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习古典密码体制的加密、解密和破译过程.
二、实验内容
1.Hill2 加密;
2.Hill2 解密。
三、实验步骤
1. 开启软件平台——MATLAB,开启MATLAB编辑窗口;
2. 根据加密解密算法步骤编写M文件
1. 保存文件并运行;
2. 观察运行结果(数值或图形);
3. 根据观察到的结果和体会写出实验报告。
四、实验要求与任务
根据实验内容和步骤,完成以下实验,要求写出实验报告。
1. 实际问题 (甲) 的修正:按照甲方与乙方的约定,他们之间的密文通信采用 Hill2 密码,密钥为二阶矩阵且汉语拼音的 26 个字母以及空格(字母 A~Z 的表值为 1~26,空格的表值为 0)与 0~26 之间的整数建立一一对应的关系,称之为字母的表值,试修正表 1、表 2 以及附录中的程序,以给出模 27 意义下矩阵可逆的判别方法和具体求法.
2. 若将你姓名的拼音作为明文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的Hill2密文.
3. 若将你姓名的拼音作为Hill2密文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的明文.
五. 程序代码及运行结果(经调试后正确的源程序)
1. 实际问题 (甲) 的修正:按照甲方与乙方的约定,他们之间的密文通信采用 Hill2 密码,密钥为二阶矩阵且汉语拼音的 26 个字母以及空格(字母 A~Z 的表值为 1~26,空格的表值为 0)与 0~26 之间的整数建立一一对应的关系,称之为字母的表值,试修正表 1、表 2 以及附录中的程序,以给出模 27 意义下矩阵可逆的判别方法和具体求法.
表1 明文字母的表值
空格 | A | B | C | D | E | F | G | H |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
I | J | K | L | M | N | O | P | Q |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
R | S | T | U | V | W | X | Y | Z |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
表2 模27倒数表
a | 1 | 2 | 4 | 5 | 7 | 8 | 10 | 11 | 13 | 14 | 16 | 17 | 19 | 20 | 22 | 23 | 25 | 26 |
a-1 | 1 | 14 | 7 | 11 | 4 | 17 | 19 | 5 | 25 | 2 | 22 | 8 | 10 | 23 | 16 | 20 | 13 | 26 |
表2可用①中程序求得:
1 求模27倒数表(prog1_MOD27.m)
程序代码:
m=27;
for a=1:m
for i=1:m
if mod(a*i,m)==1
fprintf('%d 的模%d倒数是: %d\n',a,m,i);break;
end;
end;
end
运行结果:
1 的模27倒数是: 1
2 的模27倒数是: 14
4 的模27倒数是: 7
5 的模27倒数是: 11
7 的模27倒数是: 4
8 的模27倒数是: 17
10 的模27倒数是: 19
11 的模27倒数是: 5
13 的模27倒数是: 25
14 的模27倒数是: 2
16 的模27倒数是: 22
17 的模27倒数是: 8
19 的模27倒数是: 10
20 的模27倒数是: 23
22 的模27倒数是: 16
23 的模27倒数是: 20
25 的模27倒数是: 13
26 的模27倒数是: 26
2 判断二阶矩阵在模27意义下是否可逆,可逆则求其逆(prog1.m)
程序代码:
m=27;
aa=input('输入一个2×2的矩阵,格式:[a11 a12;a21 a22]:')
while size(aa)~=[2 2]
aa=input('输入一个2×2的矩阵,格式:[a11 a12;a21 a22]:')
end
a=det(aa);bb=aa;
if gcd(m,a)~=1
disp(' 该矩阵不可逆 ')
else
for i=1:m
if mod(a*i,m)==1
antaa=i;break;
end
end
astar=[aa(2,2) -aa(1,2);-aa(2,1) aa(1,1)];
invaa=mod(antaa*astar,m);
disp(['原矩阵是:',mat2str(aa),',它的逆矩阵(mod',num2str(m),')是:',mat2str(invaa)])
end
运行结果:
输入一个2×2的矩阵,格式:[a11 a12;a21 a22]:[1 2;0 4]
aa =
1 2
0 4
原矩阵是:[1 2;0 4],它的逆矩阵(mod27)是:[1 13;0 7]
2. 若将你姓名的拼音作为明文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的Hill2密文.
程序代码:(prog2.m)
m=27;enmat=[1 2;0 4];demat=[1 13;0 7];ZERO=64;c=[];en=[];
fprintf('本组成员的姓名为 吴亚山 李杰 赵传来,拼音为:\n')
fprintf('WU YA SHAN LI JIE ZHAO CHUAN LAI\n')
fprintf('以[1 2;0 4]为密钥对此拼音串加密\n')
astr=['WU YA SHAN LI JIE ZHAO CHUAN LAI'];
an=double(astr);
if mod(length(an),2)==1
an=[an,an(length(an))];
end
an=an-ZERO;
for i=1:length(an)
if an(i)==-32
an(i)=0;
end
end
c=reshape(an,2,length(an)/2);
dn=mod(enmat*c,m);
en=reshape(dn,1,length(an));
en=en+ZERO;
for i=1:length(en)
if en(i)==64
en(i)=32;
end
end
en=en(1: length(an));
disp(['密文是:',char(en)])
运行结果:
本组成员的姓名为 吴亚山 李杰 赵传来,拼音为:
WU YA SHAN LI JIE ZHAO CHUAN LAI
以[1 2;0 4]为密钥对此拼音串加密
密文是:KCWSA HEBBXUI AIE OEDFFLWCBBXUSI
3. 若将你姓名的拼音作为Hill2密文,例如:赵本山 (ZHAO BEN SHAN,含空格),密钥等参见练习 1,求其在模 27 意义下的明文.
程序代码:(prog3.m)
m=27;enmat=[1 2;0 4];demat=[1 13;0 7];ZERO=64;c=[];en=[];
fprintf('本组成员的姓名为 吴亚山 李杰 赵传来,拼音密文为:\n')
fprintf('KCWSA HEBBXUI AIE OEDFFLWCBBXUSI\n')
fprintf('以[1 13;0 7]为密钥对此拼音串密文解密\n')
astr=['KCWSA HEBBXUI AIE OEDFFLWCBBXUSI'];
an=double(astr);
if mod(length(an),2)==1
an=[an,an(length(an))];
end
an=an-ZERO;
for i=1:length(an)
if an(i)==-32
an(i)=0;
end
end
c=reshape(an,2,length(an)/2);
dn=mod(demat*c,m);
en=reshape(dn,1,length(an));
en=en+ZERO;
for i=1:length(en)
if en(i)==64
en(i)=32;
end
end
en=en(1: length(an));
disp(['明文是:',char(en)])
运行结果:
本组成员的姓名为 吴亚山 李杰 赵传来,拼音密文为:
KCWSA HEBBXUI AIE OEDFFLWCBBXUSI
以[1 13;0 7]为密钥对此拼音串密文解密
明文是:WU YA SHAN LI JIE ZHAO CHUAN LAI
六.实验总结
本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习古典密码体制的加密、解密和破译过程.
实验中解决了如下问题:求模27倒数表;判断二阶矩阵在模27意义下是否可逆,可逆则求其逆;求明文字符串在模27意义下的Hill2密文;求密文字符串在模27意义下的Hillfprintf格式2密文。
在测试求密文的程序时,我发现按照文中表1给定的明文字母表值无法加密每个字母都用空
格分隔的字符串(第一个字符为字母),如:"A B C D E F G",经过分析,我觉得是因为空格的明文为0,经过密钥左乘后对原始数据没有影响,故没实现加密。
学生签名:
年 月 日
七.教师评语及成绩
教师签名:
年 月 日
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论