Hill密码地加密论文设计内含matlab程序代码.docx
《Hill密码地加密论文设计内含matlab程序代码.docx》由会员分享,可在线阅读,更多相关《Hill密码地加密论文设计内含matlab程序代码.docx(21页珍藏版)》请在冰点文库上搜索。
![Hill密码地加密论文设计内含matlab程序代码.docx](https://file1.bingdoc.com/fileroot1/2023-8/4/5e1dc86d-f484-49fe-9dd5-0cc35fe542ce/5e1dc86d-f484-49fe-9dd5-0cc35fe542ce1.gif)
Hill密码地加密论文设计内含matlab程序代码
Hill密码的加密,解密与破译
摘要
对于问题1.1:
本文采用
密码通信,对明文进行加密。
利用已知的密钥矩阵,首先,将密文转化为对应表值数字。
其次,对密文的数字转化为矩阵。
最后,对明文解密。
对于问题1.2:
本文给出一组明文和密文,二者满足构成密钥的条件,通过求解的到密钥,并进行问题1.1的解题过程破译这段密文。
对于问题2.1:
本文给出
密码矩阵A,并求出该矩阵的值是否与26互素,加以判断。
若互素则能成为密钥,否则不能构成密钥。
对于问题2.2:
利用问题2.1所给的密码矩阵A,按照问题1.1的解题思路,将得到的密文解密。
对于问题2.3:
本文给出一段
密码的密文和其对应的明文,通过检验二者是否满足构成密钥的条件,若满足解的密钥,并写出求解过程;若不满足加以说明。
对于问题3:
本文给出明文频数最高的字母TH和HE,及密文频数最高的字母RH和NI。
两两组合得到两组“密钥”,并检验它们是否满足构成密钥的条件,若满足则解除密钥。
对于问题4:
本文给出频数最高的相邻明文字母KE和相邻密文字母LK,采用
密码通信,利用所给字母与其他字母组合,构造2×2的矩阵,并检验是否满足构成密钥的条件,加以排除得到所要的密钥。
若有满足条件的矩阵,破译所给密文。
对于问题5:
本文采用
密码通信,根据26个字母搭配出2×2的所有矩阵,利用矩阵的值与26互质,加以排除不符合条件的矩阵,并求出满足条件的密钥,破译该段密文,再利用密文是否通顺加以排除,得到所要的明文和密钥。
关键字密钥mod(26)逆mod(26)倒数
一、Hill2密码的数学模型的主要符号说明
wHill密钥的维数
A密钥矩阵
S明文
Y密文
m所用的表值编号
YW哑文
二、Hill2密码的数学模型
Hill2密码是一种传统的密码体制加密过程的具体步骤如下:
(1)、根据明文字母的表值将明文信息用数字表示,设明文信息只需要26个拼音字母A~Z(也可能不止26个,如还有数字、标点符号等),通信双方给出这26个字母表值(见表10.1明文字母的表值)。
(2)、选择一个二阶可逆整数方阵A,称为Hill2密码的加密矩阵,它是这个加密体制的“密钥”(是加密的关键,仅通讯双方掌握)。
问题
(1)已给出了这个二阶矩阵。
(3)、将明文字母依次逐对分组。
Hill2密码的加密矩阵为二阶矩阵,则明文字母2个一组(可以推广至Hilln密码,则每n个明文字母为一组)。
若最后一组只有一个字母,则补充一个没有实际意义的哑字母,这样使每一组都由2个明文字母组成。
查出每个明文字母的表值,构成一个二维列向量α。
(4)、A乘以α,得一新的2维列向量β=Aα,由的两个分量反查字母表值得到的两个字母即为密文字母。
以上4步即为Hill2密码的加密过程。
解密过程,即为上述过程的逆过程。
1、实际问题:
1.1、问题陈述
甲方收到与之有秘密通信往来的乙方的一个密文信息,密文内容:
WOWUYSBACPGZSAVCOVKPEWCPADKPPABUJCQLYXQEZAACPP
按照甲方与乙方的约定,他们之间的密文通信采用
密码,密钥为二阶矩阵
,且汉语拼音的26个字母与0-25之间的整数建立一一对应的关系,称之为字母的表值,具体的表值见表1,问这段密文的原文是什么?
1.2、问题分析:
首先给出如下定义:
定义1:
设
为定义在集合
上的
阶方阵,若存在一个定义在
上的方阵
,使得
则称
模
可逆,
为
的模
逆矩阵,记为
定义2:
设
,若存在
使得
,则称
为
的模
倒数或乘法逆,记作
。
由于所有加密与解密过程都是在模26意义下进行的,所以要对一段明文进行加密,必须使得密钥矩阵满足
与26是互素的。
根据程序画出流程如图如下:
No
1.3程序运行结果:
>>Y=’WOWUYSBACPGZSAVCOVKPEWCPADKPPABUJCQLYXQEZAACPP’;
>>m=1;
>>A=[12;03];
>>YW='XYZ';
>>S=jie_mi2(Y,A,YW,m)
S=
MEIGUOJIANGZAITAIPINGYANGJINXINGHAIDIHESHIYANN
>>Y=jia_mi2(S,A,YW,m)
Y=
WOWUYSBACPGZSAVCOVKPEWCPADKPPABUJCQLYXQEZAACPP
2.1、问题陈述
甲方截获了一段密文:
OJWPISWAZUXAUUISEABAUCRSIPLBHAAMMLPJJOTENH经分析这段密文是用
密码编译的,且这段密码的字母UCRS一次代表字母TACO,问能否破译这段密文的内容?
2.2、问题分析
根据题意明文与密文存在一一对应关系:
设
,
且存在:
经过查表得到:
所以,用穷举法得到满足上述等式的密钥矩阵,再进一步判断
是否与26互素,若互素则可以求出在26意义下的模倒数。
模倒数表如下:
表1
a
1
3
5
7
9
11
15
17
19
21
23
25
1
9
21
15
3
19
7
23
11
5
17
25
显然,由上式所确定的密钥矩阵
是惟一的,通过
求解出模26意义下的密钥逆矩阵
进行解密。
2.3、程序运算结果
>>a='TACO';
>>b='UCRS';
>>m=1;
>>A=qiujie_miyao(a,b,m)
A=
11
03
>>Y='OJWPISWAZUXAUUISEABAUCRSIPLBHAAMMLPJJOTENH';
>>YW2='XYZ';
>>S=jie_mi2(Y,A,YW,m)
S=
CLINTONISGOINGTOVISITACOUNTRYINMIDDLEEASTT
二、实验任务
问题1
1.1、问题陈述
在问题
(2)中,若已知密文的前4个字母OJWP分别代表TACO,问能否将此密文破译?
不能,因为解得的密钥的行列式与26不互素,不能得到对应的模26逆矩阵。
求解密钥矩阵流程图如下
NoooooooO20561oooo
1.2、运行结果
>>a='TACO';
>>b='OJWP';
>>m=1;
>>A=qiujie_miyao(a,b,m)
A=
167
2424
>>D=det(A)
D=
216
>>n=gcd(D,26)
n=
2
问题二
利用
密码体制的原理,根据给定的26个英文字母的乱序表值(见表2),设计与建立
密码体制的加密,解密与破译框图并建立必要的计算机程序,设英文26个字母以下面的乱序表与
中的整数对应:
表2
A
B
C
D
E
F
G
H
I
J
K
L
M
5
23
2
20
10
15
8
4
18
25
0
16
13
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
7
3
1
19
6
12
24
21
17
14
22
11
9
2.1.1、问题陈述
设
,验证矩阵A能否作为
密码体制的加密矩阵,用框图画出你的验算过程,并编写相应的计算机程序。
2.1.2、问题分析
A可用作密钥,因为其行列式值为-1,与26互素。
2.1.3、运行结果
编程计算得A的模26逆矩阵如下:
>>A=invmod(A)
A=
232051
211181
220625
2522225
det(A)
|A|=
-1.0000
2.2.1、问题陈述
设明文为
HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL.
利用上面的表值与加密矩阵给明文加密,并将得到的密文解密。
画出加密与解密过程的框图并编写相应的计算机程序。
框图如下:
2.2.2、运行结果
>>A=[8695;69510;5849;106114];
>>YW='Z';
>>m=2;
>>w=4;
>>S='HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL';
>>Y=jia_mi2(S,A,YW,m,w)
Y=KEGTKPNJKYXRLAOLMZTPVYTUNHZSCEGDZRPZ
>>S=jie_mi2(Y,A,YW,m,w)
S=HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL
2.3.1、问题陈述
已知在上述给定表值下的一段
密码的密文为:
JCOWZLVBDVLEQMXC,对应的明文为DELAYOPERATIONSU,能否确定对应的加密矩阵?
给出你的判断过程。
能。
2.3.2、运行结果
>>a='DELAYOPERATIONSU';
>>b='JCOWZLVBDVLEQMXC';
>>m=2;
>>w=4;
>>A=qiujie_miyao(a,b,m,w)
A=
8695
69510
5849
106114
问题3
3.1、问题重述
设已知一份为
密码体系,其中出现频数最高的双字母是RH和NI,而在明文语言中,出现频数最高的双字母为TH和HE。
由这些信息按表3给出的表值能得到什么样的加密矩阵?
表3
A
B
C
D
E
F
G
H
I
J
JK
L
M
0
1
2
3
4
5
6
7
8
9
10
11
12
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
13
14
15
16
17
18
19
20
21
22
23
24
25
3.2、问题分析
不能,因为两组组合解得的两个矩阵的行列式值都不与26互素,不能得到对应的模26逆矩阵。
3.3、运行结果
>>a='THHE';
>>b='RHNI';
>>m=3;
>>w=2;
>>A=qiujie_miyao(a,b,m,w)
A=
324
2425
>>D=gcd(det(A),26)
D=
1
>>b='NIRH';
>>A=qiujie_miyao(a,b,m,w)
>>b='NIRH';
A=qiujie_miyao(a,b,m,w)
A=
1124
925
>>D=gcd(det(A),26)
D=
1
问题4
4.1、问题重述
如下的密文据表1以Hill2加密,密文为
VIKYNOTCLKYRJQETIRECVUZLNOJTUYDIMHRCFITQ
已获知其中相邻字母LK表示字母KE,试破译这份密文。
4.2、问题分析
通过密文‘LK’对应的明文‘KE’得出:
,
且存在
,其中
为密钥。
所以,求得的
必满足:
4.3、运行结果
>>a='KE';
>>b='LK';
>>Y='VIKYNOTCLKYRJQETIRECVUZLNOJTUYDIMHRCFITQ';
>>m=1;
>>SJ=po_yi04(Y,a,b,m)
问题5
5.1、问题重述
找出元素属于
的所有可能的
密码加密矩阵。
若截获了如下一段密文
UTCQCVFOYQUVMGMGULFOEYHDUHOPEASWXTIFBAMWT
且已知它是根据表1按
密码体制加密的,你能否将其解密?
5.2、问题分析
能,将密文通过所有可能密钥进行解密,对结果进行筛选,进行人工分析即可得出结果。
程序:
%%%%%%%%%%%%%%%%%%%%加密程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
functionmi_wen=ja_mi(A,ming_wen,m,w)
%‘A’为解密矩阵,‘m’为选取参考表值类型,‘w’维数
n=length(ming_wen);
switchm%将密文转换相应的数字
case1
ming_wen=zimu_to_shuzi1(ming_wen);
case2
ming_wen=zimu_to_shuzi2(ming_wen);
case3
ming_wen=zimu_to_shuzi3(ming_wen);
end
Z=[];
ifmod(n,w)==0
S=ming_wen;
else
fori=1:
w-mod(n,w)%判断密文长度是否能被w整除
Z(i)=ming_wen(n);
S=[ming_wen,Z];
end
end
ming_wen=S;
n=length(ming_wen);
H=zeros(w,n/w);
fori=1:
n/w
H(:
i)=ming_wen(i*w-w+1:
i*w);
end
mi_wen=mod(A*H,26);
C=[];
fori=1:
n/w
C=[C,mi_wen(:
i)'];
end
mi_wen=C;
switchm%将密文转换相应的数字
case1
mi_wen=shuzi_to_zimu1(mi_wen);
case2
mi_wen=shuzi_to_zimu2(mi_wen);
case3
mi_wen=shuzi_to_zimu3(mi_wen);
end
mi_wen=char(mi_wen);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%解密程序%%%%%%%%%%%%%%%%%
functionming_wen=jie_mi(A,mi_wen,m,w)
%解密
%‘A’为解密矩阵,‘m’为选取参考表值类型,‘w’维数
n=length(mi_wen);
switchm
case1
mi_wen=zimu_to_shuzi1(mi_wen);%将密文转换相应的数字
case2
mi_wen=zimu_to_shuzi2(mi_wen);%将密文转换相应的数字
case3
mi_wen=zimu_to_shuzi3(mi_wen);%将密文转换相应的数字
end
Z=[];
ifmod(n,w)==0
S=mi_wen;
else
fori=1:
w-mod(n,w)%判断密文长度是否能被w整除
Z(i)=mi_wen(n);
S=[mi_wen,Z];
end
end
mi_wen=S;
n=length(mi_wen);
H=zeros(w,n/w);
fori=1:
n/w
H(:
i)=mi_wen(i*w-w+1:
i*w);
end
B=invmod(A);
B=mod(B,26);
ming_wen=mod(B*H,26);
C=[];
fori=1:
n/w
C=[C,ming_wen(:
i)'];
end
ming_wen=C;
switchm
case1
ming_wen=shuzi_to_zimu1(ming_wen);%将密文转换相应的数字
case2
ming_wen=shuzi_to_zimu2(ming_wen);%将密文转换相应的数字
case3
ming_wen=shuzi_to_zimu3(ming_wen);%将密文转换相应的数字
end
ming_wen=char(ming_wen);
end
%%%%%%%%%%%%%%%%%%密钥求解%%%%%%%%%%%%%%%%%%%%%%
functionA=miyao_qiujie(a,b,m,w)
%求解密钥矩阵
%a为明文,b为密文,m为所选表值,w为密钥矩阵维数
switchm
case1
a=zimu_to_shuzi1(a);
b=zimu_to_shuzi1(b);
case2
a=zimu_to_shuzi2(a);
b=zimu_to_shuzi2(b);
case3
a=zimu_to_shuzi3(a);
b=zimu_to_shuzi3(b);
end
switchw
case2%二维密钥
ac=[];
bd=[];
fori=0:
25
forj=0:
25
if
mod(i*a
(1)+j*a
(2),26)==b
(1)&mod(i*a(3)+j*a(4),26)==b(3)
ac=[i,j];
end
ifmod(i*a
(1)+j*a
(2),26)==b
(2)&mod(i*a(3)+j*a(4),26)==b(4)
bd=[i,j];
end
end
end
A=[ac;bd];
case3%三维密钥
abc=[];
def=[];
ghi=[];
fori=0:
25
forj=0:
25
fork=0:
25
ifmod(i*a
(1)+j*a
(2)+k*a(3),26)==b
(1)&mod(i*a(4)+j*a(5)+k*a(6),26)==b
(2)&mod(i*a(7)+j*a(8)+k*a(9),26)==b(3)
abc=[i,j,k];
end
ifmod(i*a
(1)+j*a
(2)+k*a(3),26)==b(4)&mod(i*a(4)+j*a(5)+k*a(6),26)==b(5)&mod(i*a(7)+j*a(8)+k*a(9),26)==b(6)
def=[i,j,k];
end
ifmod(i*a
(1)+j*a
(2)+k*a(3),26)==b(7)&mod(i*a(4)+j*a(5)+k*a(6),26)==b(8)&mod(i*a(7)+j*a(8)+k*a(9),26)==b(9)
ghi=[i,j,k];
end
end
end
end
A=[abc;def;ghi];
case4%四维密钥
abcd=[];
efgh=[];
ijkl=[];
mnop=[];
fori=0:
25
forj=0:
25
fork=0:
25
forl=0:
25
ifmod(i*a
(1)+j*a
(2)+k*a(3)+l*a(4),26)==b
(1)&mod(i*a(5)+j*a(6)+k*a(7)+l*a(8),26)==b
(2)&mod(i*a(9)+j*a(10)+k*a(11)+l*a(12),26)==b(3)&mod(i*a(13)+j*a(14)+k*a(15)+l*a(16),26)==b(4)
abcd=[i,j,k,l];
end
ifmod(i*a
(1)+j*a
(2)+k*a(3)+l*a(4),26)==b(5)&mod(i*a(5)+j*a(6)+k*a(7)+l*a(8),26)==b(6)&mod(i*a(9)+j*a(10)+k*a(11)+l*a(12),26)==b(7)&mod(i*a(13)+j*a(14)+k*a(15)+l*a(16),26)==b(8)
efgh=[i,j,k,l];
end
ifmod(i*a
(1)+j*a
(2)+k*a(3)+l*a(4),26)==b(9)&mod(i*a(5)+j*a(6)+k*a(7)+l*a(8),26)==b(10)&mod(i*a(9)+j*a(10)+k*a(11)+l*a(12),26)==b(11)&mod(i*a(13)+j*a(14)+k*a(15)+l*a(16),26)==b(12)
ijkl=[i,j,k,l];
end
ifmod(i*a
(1)+j*a
(2)+k*a(3)+l*a(4),26)==b(13)&mod(i*a(5)+j*a(6)+k*a(7)+l*a(8),26)==b(14)&mod(i*a(9)+j*a(10)+k*a(11)+l*a(12),26)==b(15)&mod(i*a(13)+j*a(14)+k*a(15)+l*a(16),26)==b(16)
mnop=[i,j,k,l];
end
end
end
end
A=[abcd;efgh;ijkl;mnop];
end
end
A;
End
%%%%%%%%%%%%%%%%%%%%%%%密钥求逆%%%%%%%%%%%%%%%%%%%%%%%%%
functionY=invmod(A)
D=det(A);
D=round(D);
ifgcd(D,26)~=1
disp('Error!
');
else
fori=1:
25
ifmod(i*D,26)==1
break;
end;
end;
invD=i;
Y=mod(D*inv(A)*invD,26);
end
Y=round(Y);
%%%%%%%%%%%%%%%%%%%%%破译密文%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
functionming_wen=po_yi04(mi_wen,m)
a='KE';
b='LK';
AS=miyao_qiujie04(a,b);
n=length(AS);
ming_wen=[];
w=2;
fori=1:
n
C=jie_mi(AS(:
:
i),mi_wen,m,w);
ming_wen=[ming_wen;C];
end
ming_wen=abs(ming_wen);
dlmwrite('data.txt',ming_wen,'newline','PC');
end