古典密码与破译
一、实验目的及意义
本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习古典密码体制的加密、解密和破译过程.
二、实验内容
1.Hill2 加密;
2.Hill2 解密。
三、实验步骤
1. 开启软件平台——MATLAB,开启MATLAB编辑窗口;
2. 根据加密解密算法步骤编写M文件
1. 保存文件并运行;
2. 观察运行结果(数值或图形);
3. 根据观察到的结果和体会写出实验报告。
四、实验要求与任务
根据实验内容和步骤,完成以下实验,要求写出实验报告。
1. 实际问题 () 的修正:按照甲方与乙方的约定,他们之间的密文通信采用 Hill2 密码,密钥为二阶矩阵且汉语拼音的 26 个字母以及空格(字母 A~Z 的表值为 1~26,空格的表值为 0)与 026 之间的整数建立一一对应的关系,称之为字母的表值,试修正表 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)与 026 之间的整数建立一一对应的关系,称之为字母的表值,试修正表 1、表 2 以及附录中的程序,以给出模 27 意义下矩阵可逆的判别方法和具体求法.
明文字母的表值
空格
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
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小时内删除。