实验十Hill密码的加密解密与破译.docx

上传人:b****4 文档编号:5205892 上传时间:2022-12-13 格式:DOCX 页数:29 大小:331.30KB
下载 相关 举报
实验十Hill密码的加密解密与破译.docx_第1页
第1页 / 共29页
实验十Hill密码的加密解密与破译.docx_第2页
第2页 / 共29页
实验十Hill密码的加密解密与破译.docx_第3页
第3页 / 共29页
实验十Hill密码的加密解密与破译.docx_第4页
第4页 / 共29页
实验十Hill密码的加密解密与破译.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

实验十Hill密码的加密解密与破译.docx

《实验十Hill密码的加密解密与破译.docx》由会员分享,可在线阅读,更多相关《实验十Hill密码的加密解密与破译.docx(29页珍藏版)》请在冰豆网上搜索。

实验十Hill密码的加密解密与破译.docx

实验十Hill密码的加密解密与破译

 

Hill

 

[实验十]Hill密码的加密、解密与破译

一、实验目的

本实验主要涉及代数,利用模运算意义下的矩阵乘法、求逆矩阵、线性无关、线性空间与线性变换等概念和运算,学习Hill密码体制的加密、解密和破译过程。

二、实验内容

(1)甲方收到与之有秘密通信往来的乙方的一个密文信息,密文内容:

WOWUYSBACPGZSAVCOVKPEWCPADKPPABUJCQLYXQEZAACPP

按照甲方与乙方的约定,他们之间的密文通信采用Hill2密码,密钥为

二阶矩阵且汉语拼音的26个字母与0~25之间的整数建立一一对应的关系,称之为字母的表值,具体的表值见表10.1明文字母的表值。

问这段密文的原文是什么?

表10.1明文字母的表值

A

B

C

D

E

F

G

H

I

J

K

L

M

1

2

3

4

5

6

7

8

9

10

11

12

13

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

14

15

16

17

18

19

20

21

22

23

24

25

0

(2)甲方截获了一段密文:

OJWPISWAZUXAUUISEABAUCRSIPLBHAAMMLPJJOTENH经分析这段密文是用Hill2密码编译的,且这段密文的字母UCRS依次代表字母TACO,问能否破译这段密文的内容?

三、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密码的加密过程。

解密过程,即为上述过程的逆过程。

例如,明文为YICHUFA,A=

将明文相邻2个字母分为一组:

YICHUFAA,最后一个字母A是为使最后一组的字母数为2而添加的,无实际意义。

根据表值可构造相应2维列向量:

(*)

用矩阵A左乘上述4个向量,得到4个新的列向量:

为与表值对应作模26运算得到:

关于模m运算,可以验证,对两个正整数a1,a2进行加,减或乘的模m运算有如下规律:

这样,这4个新的2维列向量对应的字母为QASXGRCC这段文字即为明文“YICHUFA”的密文。

要将这段密文解密,只要将上述加密过程逆转回去,即将密文按同样方式分组,查他们的表值即得:

但如何由该组中的向量求得(*)中的向量呢?

这是在模运算意义下,如何求解方程组:

Aα=β的问题。

一个一般的n阶方阵可逆的充要条件为detA≠0。

在模26意义下矩阵可逆与一般的矩阵可逆有所不同。

记整数集合Zm={0,1,2,…,m−1},m为一正整数,模m可逆定义如下:

定义1对于一个元素属于集合Zm的n阶方阵A,若存在一个元素属于Zm集合的方阵B,使得AB=BA=E(modm)称A为模m可逆,B为A的模m逆矩阵,记为B=A-1(modm)

E(modm)的意义是,每一个元素减去m的整数倍后,可以化成单位矩阵。

例如,

定义2对Zm的一个整数a,若存在Zm的一个整数b,使得ab=1(modm),称b为a的模m倒数或乘法逆,记作b=a−1(modm)。

可以证明,如果a与m无公共素数因子,则a有唯一的模m倒数(素数是指除了1与自身外,不能被其他非零整数整除的正整数)。

例如,3−1=9。

利用这点,可以证明下述命题:

命题元素属于Zm的方阵A模m可逆的充要条件是,m和detA没有公共素数因子。

显然,所选加密矩阵必须符合该命题的条件。

问题

(1)所选择的明文字母共26个,m=26,26的素数因子为2和13,所以Z26上的方阵A可逆的充要条件为detA(modm)不能被2和13整除。

,若A满足命题的条件,可验证

其中(ad−bc)−1是(ad-bc)(mod26)的倒数。

显然,(ad-bc)(mod26)为Z26中的数。

Z26中有模26倒数的整数及其倒数可见表10.2。

根据上述命题与表10.2,问题

(1)所选加密矩阵A的行列式detA=3没有2与13这两个素数因子,所以A模26可逆。

这样,在模26的意义下,求解Aα=β的问题即可解决:

α=A−1β(mod26)

根据上面所述的加密与解密过程可知,问题

(1)有解。

将译出的明文依汉语拼音写出,经组合得:

MEIGUOJIANGZAITAIPINGYANGJINXINGHAIDIHESHIYAN即为“美国将在太平洋进行海底核试验”。

Ⅱ、破译过程

问题

(2)属于破译问题。

前面的加密与解密过程类似于在二维向量空间进行线性变换与其逆变换。

每个明文向量是一个Zm上的二维向量,乘以加密矩阵后,仍为Zm上的一个二维向量。

由于加密矩阵A为可逆矩阵,所以,如果知道两个线性无关的二位明文向量与其对应的密文向量,就可以求出它的加密矩阵A及A-1.问题

(2)的密文中只出现一些字母,当然它可以是汉语拼音,或英文字母或其他语言的字母。

所以可猜测秘密信息是由26个字母组成,设m=26。

通常由破译部门通过大量的统计分析与语言分析确定表值。

假如,所确定的表值为表10.1,已知

在模26的意义下,

它有模26倒数,所以,β1,β2在模26意义下线性无关。

类似地,也可以验证detα1,α2=11(mod26)线性无关。

记P=β1,β2,C=α1,α2,则P=AC,A=PC−1。

这样,可以利用模26意义下的初等行变换,求得(A-1)T,因而可以求出A-1。

利用A-1即可将问题

(2)的密文解出。

利用与问题

(1)同样的解密方法,可以求得,这段密文的明文为:

CLINTON|IS|GOING|TO|VISIT|A|CO

UNTRY|IN|MIDDLE|EAST|T

分析这段文字,如果依竖线所划分成的词汇,则这段密文可理解为如下一段文字:

“ClintonisgoingtovisitacountryinMiddleEast”,最后一个字母是哑字母。

这样,可以认为破译成功。

四、实验任务

1.在问题

(2)中,若已知密文的前4个字母OJMP分别代表TACO,问能否将此段密文破译?

2.利用所介绍的Hill2密码体制的原理,根据给定的26个英文字母的乱序表值(见表10.3),设计与建立Hill4密码体制的加密、解密与破译框图并建立必要的计算机程序。

设英文26个字母以下面的乱序表与Z26中的整数对应:

表10.3

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

(1)设

,验证矩阵A能否作为Hill4密码体制的加密矩阵用框图画出你的演算过程,并编写相应的计算机程序。

(2)设明文为HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL.利用上面的表值与加密矩阵给此明文加密,并将得到的密文解密。

画出加密与解密过程的框图并编写相应的计算机程序。

(3)已知在上述给定表值下的一段Hill4密码的密文为JCOWZLVBDVLEQMXC,对应的明文为DELAYOPERATIONSU.能否确定对应的加密矩阵?

给出你的判断过程。

3.设已知一份密文为Hill2密码体系,其中出现频数最高的双字母是RH和NI,而在明文语言中,出现频数最高的双字母为TH和HE。

由这些信息按表10.4给出的表值能得到什么样的加密矩阵?

表10.4明文字母的表值

A

B

C

D

E

F

G

H

I

J

K

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

4.如下的密文据表10.1以Hill2加密,密文为

VIKYNOTCLKYRJQETIRECVUZLNOJTUYDIMHRCFITQ

已获知其中相邻字母LK表示字母KE,试破译这份密文。

5.找出元素属于Z26的所有可能的Hill2密码加密矩阵,若截获了如下一段密文:

UTCQCVFOYQUVMGMGULFOLEYHDUHOPEASWXTIFBAMWT

且已知它是根据表10.1按Hill2密码体制加密的,你能否将其解密?

五、采用方法与实验结果

1、已知

密文明文密文明文

按表可知,

它没有数论倒数,所以

在模26意义下线性相关,无法得到模26可逆的加密矩阵A,故不能破译该密文。

2、

(1)验算过程

MATLAB程序:

disp('输入密钥(矩阵)的维数');

n=input('');

disp('输入密钥(矩阵,按行输入)');

key=zeros(n,n);

forj=1:

n

fork=1:

n

key(j,k)=input('');

end

end

d=round(mod(det(key),26));%求矩阵的行列式

ifd==0,2,4,6,8,10,12,13,14,16,18,20,22,24%判断矩阵是否可逆

error('A不可作为加密矩阵');

sprintf('A可作为加密矩阵')

end

实验结果:

A可作为加密矩阵

(2)明文为HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL

密文为KEGTKPNJKYXRLAOLMZTPVYTUNHZSCEGDZRPZ

序号

分组明文

明文表值

密文表值

分组密文

明文表值

分组明文

1

H

I

L

L

4

18

16

16

0

10

8

24

K

E

G

T

4

18

16

16

H

I

L

L

2

C

R

Y

P

2

1

11

1

0

1

7

25

K

P

N

J

2

1

11

1

C

R

Y

P

3

T

I

G

R

24

3

8

6

0

11

22

6

K

Y

X

R

24

3

8

6

T

I

G

R

4

A

P

H

I

5

1

4

18

16

5

3

16

L

A

O

L

5

1

4

18

A

P

H

I

5

C

S

Y

S

2

12

11

12

13

9

24

1

M

Z

T

P

2

12

11

12

C

S

Y

S

6

T

E

M

I

24

10

13

18

17

11

24

21

V

Y

T

U

24

10

13

18

T

E

M

I

7

S

T

R

A

12

24

6

5

7

4

9

12

N

H

Z

S

12

24

6

5

S

T

R

A

8

D

I

T

I

20

18

24

18

2

10

8

20

C

E

G

D

20

18

24

18

D

I

T

I

9

O

N

A

L

3

7

5

16

9

6

1

9

Z

R

P

Z

3

7

5

16

O

N

A

L

MATLAB程序:

加密程序

解密程序

%输入密钥

disp('输入密钥(矩阵)的维数');

n=input('');

disp('输入密钥(矩阵,按行输入)');

key=zeros(n,n);

forj=1:

n

fork=1:

n

key(j,k)=input('');

end

end

d=round(mod(det(key),26));%求矩阵的行列式

ifd==0%判断矩阵是否可逆

error('密钥矩阵不可逆,无法实现Hill密码');

end

%输入明文

message=input('输入明文\n','s');

m=size(message);

m=m

(2);

ifmod(m,n)~=0

error('输入错误,明文长度应为矩阵维数的倍数');

end

fori=1:

m

ifmessage(i)>='A'&&message(i)<='Z'

message(i)=message(i)-64;

%字母翻译为数字

switchmessage(i)

case1

message(i)=5;

case2

message(i)=23;

case3

message(i)=2;

case4

message(i)=20;

case5

message(i)=10;

case6

message(i)=15;

case7

message(i)=8;

case8

message(i)=4;

case9

message(i)=18;

case10

message(i)=25;

case11

message(i)=26;

case12

message(i)=16;

case13

message(i)=13;

case14

message(i)=7;

case15

message(i)=3;

case16

message(i)=1;

case17

message(i)=19;

case18

message(i)=6;

case19

message(i)=12;

case20

message(i)=24;

case21

message(i)=21;

case22

message(i)=17;

case23

message(i)=14;

case24

message(i)=22;

case25

message(i)=11;

case26

message(i)=9;

end

else

error('输入错误,应该输入字母');

end

end

%加密

i=1;

whilei

B=message(i:

i+n-1)';

a=key*B;

A(i:

i+n-1)=a';

i=i+n;

end

fori=1:

m

ifA(i)>26

A(i)=mod(A(i),26);

end

ifA(i)==0

A(i)=26;

end

%数字翻译为字母

switchA(i)

case1

A(i)=16;

case2

A(i)=3;

case3

A(i)=15;

case4

A(i)=8;

case5

A(i)=1;

case6

A(i)=18;

case7

A(i)=14;

case8

A(i)=7;

case9

A(i)=26;

case10

A(i)=5;

case11

A(i)=25;

case12

A(i)=19;

case13

A(i)=13;

case14

A(i)=23;

case15

A(i)=6;

case16

A(i)=12;

case17

A(i)=22;

case18

A(i)=9;

case19

A(i)=17;

case20

A(i)=4;

case21

A(i)=21;

case22

A(i)=24;

case23

A(i)=2;

case24

A(i)=20;

case25

A(i)=10;

case26

A(i)=11;

end

A(i)=A(i)+64;

end

str=char(A);

fprintf('密文为%s',str)

%输入密钥

disp('输入密钥(矩阵)的维数');

n=input('');

disp('输入密钥(矩阵,按行输入)');

key=zeros(n,n);

forj=1:

n

fork=1:

n

key(j,k)=input('');

end

end

d=round(mod(det(key),26));%求矩阵的行列式

%输入密文

message=input('输入密文\n','s');

m=size(message);

m=m

(2);

ifmod(m,n)~=0

error('输入错误,密文长度应为矩阵维数的倍数');

end

fori=1:

m

ifmessage(i)>='A'&&message(i)<='Z'

message(i)=message(i)-64;

%字母翻译为数字

switchmessage(i)

case1

message(i)=5;

case2

message(i)=23;

case3

message(i)=2;

case4

message(i)=20;

case5

message(i)=10;

case6

message(i)=15;

case7

message(i)=8;

case8

message(i)=4;

case9

message(i)=18;

case10

message(i)=25;

case11

message(i)=26;

case12

message(i)=16;

case13

message(i)=13;

case14

message(i)=7;

case15

message(i)=3;

case16

message(i)=1;

case17

message(i)=19;

case18

message(i)=6;

case19

message(i)=12;

case20

message(i)=24;

case21

message(i)=21;

case22

message(i)=17;

case23

message(i)=14;

case24

message(i)=22;

case25

message(i)=11;

case26

message(i)=9;

end

else

error('输入错误,应该输入字母');

end

end

%r1为d的逆

switchd

case1

r1=1;

case3

r1=9;

case5

r1=21;

case7

r1=15;

case9

r1=3;

case11

r1=19;

case15

r1=7;

case17

r1=23;

case19

r1=11;

case21;

r1=5;

case23

r1=17;

case25

r1=25;

otherwisedisp('d倒数不存在');

end

detk=det(key);

invk=inv(key);

k=detk*invk;

key2=round(mod(r1*k,26));

i=1;

whilei

p=message(i:

i+n-1)';

a=key2*p;

B(i:

i+n-1)=a';

i=i+n;

end

fori=1:

m

ifB(i)>26

B(i)=round(mod(B(i),26));

end

ifB(i)==0

B(i)=26;

end

%数字翻译为字母

switchB(i)

case1

B(i)=16;

case2

B(i)=3;

case3

B(i)=15;

case4

B(i)=8;

case5

B(i)=1;

case6

B(i)=18;

case7

B(i)=14;

case8

B(i)=7;

case9

B(i)=26;

case10

B(i)=5;

case11

B(i)=25;

case12

B(i)=19;

case13

B(i)=13;

case14

B(i)=23;

case15

B(i)=6;

case16

B(i)=12;

case17

B(i)=22;

case18

B(i)=9;

case19

B(i)=17;

case20

B(i)=4;

case21

B(i)=21;

case22

B(i)=24;

case23

B(i)=2;

case24

B(i)=20;

case25

B(i)=10;

case26

B(i)=11;

end

B(i)=B(i)+64;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1