MATLAB - Hilln密码程序(包括加密、解密及破译三个环节)实验报告书

更新时间:2023-12-09 05:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数模实验一

实验内容:用MATLAB实现Hilln密码程序(包括加密、解密及破译三个环节) 一实验目的

实现Hilln密码体系的关键环节(加密、解密、破译) 二 预备知识

熟悉mod、det、find等Matlab命令 三 实验内容与要求

(1)假设加密矩阵为A=??03??,用

???12?MATLAB编制程序,加密下面一

段明文:SHUXUEJIANMOJINGSAI 命令 function hill() %输入密钥 disp('输入密钥(矩阵)的维数'); n=input(''); disp('输入密钥(矩阵,按行输入)'); key=zeros(n,n); for j=1:n for k=1:n key(j,k)=input(''); end end 结果 IXQTEOBACPQSBABUUCAA 1

d=det(key);%求矩阵的行列式 if d==0%判断矩阵是否可逆 error('密钥矩阵不可逆,无法实现Hill密码'); end %输入明文 message=input('输入明文 \\n','s'); m=size(message); m=m(2); if mod(m,n)~=0 error('输入错误,明文长度应为矩阵维数的倍数'); end for i=1:m if message(i)>='A' && message(i)<='Z' message(i)=message(i)-64; else error('输入错误,应该输入字母'); end end %加密 2

i=1; while i26 A(i)=mod(A(i),26); end A(i)=A(i)+64; end str=char(A); fprintf('密文为%s',str) (2)假设加密矩阵为A=??11??,用MATLAB编制程序,解密下面一?03?段密文:AXSTZOSAOPBSTKSANKOPSAHAUUNSUUAKGAUZCKOPDO 命令 function hill2() %输入密钥 disp('输入密钥(矩阵)的维数'); n=input(''); 结果 YTMHOSTCEVUEEGTC YGEVTCICPKGEPKLG HCU@NGEVSS 3

disp('输入密钥(矩阵,按行输入)'); key=zeros(n,n); for j=1:n for k=1:n key(j,k)=input(' '); end end d=det(key);%求矩阵的行列式 if d==0%判断矩阵是否可逆 error('密钥矩阵不可逆,无法实现Hill密码'); end %输入密文 message=input('输入密文 \\n','s'); m=size(message); m=m(2); if mod(m,n)~=0 error('输入错误,密文长度应为矩阵维数的倍数'); end for i=1:m if message(i)>='A' 4

&&message(i)<='Z' message(i)=message(i)-64; else error('输入错误,应该输入字母'); end end %r1为d的逆 while d>26 d=mod(d,26); end switch d case 1 r1=1; case 3 r1=9; case 5 r1=21; case 7 r1=15 case 9 r1=3; case 11 5

r1=19; case 15 r1=7; case 17 r1=23; case 19 r1=11; case 21; r1=5; case 23 r1=17; case 25 r1=25; otherwise disp('d倒数不存在'); end detk=det(key); invk=inv(key); k=detk*invk; key2=r1*k; for i=1:n for j=1:n key2(i,j)=mod(key2(i,j),26); 6

if key2(i,j)<0 key2(i,j)=key2(i,j)+26; end end end i=1; while i26 B(i)=mod(B(i),26); End if B(i)==0 B(i)=26; end B(i)=B(i)+64; end str2=char(B); 7

fprintf('\\n对密文解密后明文为%s\\n',str2) end (3)甲方截获了一段密文:

BKOPGATRHMMBFCSDJCCAUU

经分析这段密文是用Hill2密码编译的,且这段密文的字母SDJC依次代表字母IJIA,请破译这段密文的内容

Matlab命令 function hill3() %截获的密文 message1=input('输入截获密文 \\n','s'); for i=1:4 if message1(i)>='A' && 结果 OSQDRWDXSMSTGQ WNWQBWDO message1(i)<='Z' message1(i)=message1(i)-64; else error('输入错误,应该输入大写字母'); end end %对应的明文 8

message2=input('输入对应的明文 \\n','s'); for i=1:4 if message2(i)>='A' && message2(i)<='Z' message2(i)=message2(i)-64; else error('输入错误,应该输入大写字母'); end end %求密钥的逆矩阵 B=[]; B(1,1)=message1(1);B(2,1)=message1(2); B(1,2)=message1(3);B(2,2)=message1(4); d=det(B); while d>26 d=mod(d,26); end switch d case 1 r1=1; case 3 9

r1=9; case 5 r1=21; case 7 r1=15 case 9 r1=3; case 11 r1=19; case 15 r1=7; case 17 r1=23; case 19 r1=11; case 21; r1=5; case 23 r1=17; case 25 r1=25; otherwise disp('d倒数不存在'); 10

本文来源:https://www.bwwdw.com/article/x4y5.html

Top