- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hill密码的加密
Hill密码的加密、解密和破译 实验报告
吴林柱
5100309888
实验任务
利用所介绍的Hill密码体制原理,根据所给定的26个英文字母的乱序表值(见表),设计与Hill4密码体制的加密、解密与破译框图并建立必要的计算机程序。设英文26个字母以下的乱序表与Z26中的整数对应:
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 设,验证矩阵A能否作为Hill4,用框图画出你的验算过程,并编写相应的计算机程序。
设明文为HILL CRYPTOGRAPHIC SYSTEM IS TRADITIONAL。利用上面的表值与加密矩阵给此明文加密,并将得到的密文解密。画出加密与解密过程的框图并编写相应的计算机程序。
已知在上述给定值下的一段密文为JCOWZLVBDVLEQMXC,对应的明文为DELAY OPERATIONSU。能否确定对应的加密矩阵?给出你的判断过程。
如下的密文据表10.1以Hill加密,密文为VIKYNOTCLKYRJQETIRECVUZLNOJTUYDI
MHRFITQ。已获知其中相邻字母LK表示字母KE,试破译这份密文。
找出元素属于Z26的所有可能的Hill密码加密矩阵。若截获了如下一段密文
UTCQCVFOYQUVMGMGULFOLEYHDUDOPEASWXTIFBAMWT
且知他是根据表10.1按Hill密码 体制加密的,能否破译?
实验解答
2、
由定义可知,元素属于Zm的方阵A模m可逆的充要条件是,m和det A没有公共素因子。因此,框图如下:
Matlab程序:
function y=isInverse(M)
D=det(M);
if gvd(D,26)~=1
y=false;
else
y=true;
end;
经验证,det A=-1,因此,A可作为Hill4密码体制的加密矩阵。
(2)
加密框图:
解密框图:
加密程序:
function m=encryption(str)
table=[5 23 2 20 10 15 8 4 18 25 0 16 13 7 3 1 19 6 12 24 21 17 14 22 11 9];
len=length(str);
A=[8 6 9 5;6 9 5 10;5 8 4 9;10 6 11 4];
tmp=blanks((floor(len/4)+1)*4-mod(len,4));
if mod(len,4)~=0
for i=1:length(tmp)
tmp(i)=str(len);
end;
end;
str=strcat(str,tmp);
len=length(str);
m=blanks(len);
for i=1:4:len
col=eye(4,1);
for j=1:4
col(j)=table(str(i+j-1)-A+1);
end;
col
col=mod(A*col,26);
col
for j=1:4
for z=1:26
if col(j)==table(z)
break
end;
end;
m(i+j-1)=A+z-1;
end;
end;
str=encryption(HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL);
密文为KEGTKPNJKYXRLAOLMZTPVYIUNHZSCEGDZRPZ
解密程序:
function str=decryption(str0,A)
table=[5 23 2 20 10 15 8 4 18 25 0 16 13 7 3 1 19 6 12 24 21 17 14 22 11 9];
len=length(str0);
str=blanks(len);
for i=1:4:len
col=eye(4,1);
for j=1:4
col(j)=table(str0(i+j-1)-A+1);
end;
col=A*col;
for j=1:4
for z=1:26
if col(j)==table(z)
break
end;
end;
st
文档评论(0)