1.实验目的:
(1)了解经典加密算法对于同学们理解现代密码学的基本思想有很大帮助。
(2)在本实验中,采用MATLAB实现hill加密
2.实验设备:
Win10系统、MATLAB软件
3.实验原理:
希尔密码(Hill Password)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。每个字母当作26进制数字:a=0, b=1, c=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。
注意:用作加密的矩阵(即密匙)必须是可逆的,否则就不可能译码。只有矩阵的行列式和26互质,才是可逆的。
1)加密:密文=明文*密钥矩阵*mod26 (注:明文要被分割成与密钥维数相同的一维行列式)
2)解密:明文=密文*密钥矩阵的逆mod26 (注:要求与加密过程相同)
3.实验内容:
为了实现Hill加密,需要如下的功能模块:
1.需要一个子程序将输入的字符串转换为从0-26的数字;
2.需要编写一个实现mode26的矩阵向量乘法子程序;
注:先写出总体的代码,然后实现每一个模块。
clear all;
message_P=input('INPUT:','s');
n=length(message_P);
%%加密过程
p=char(message_P)-97;%明文字母转数字
if mod(n,3)==0
p1=p;
else if mod(n,3)==1
p(n+1)=25;
p(n+2)=25;
p1=p;
else
if mod(n,3)==2
p(n+1)=25;
p1=p;
else
end
end
end
%秘钥矩阵可更改
k=[1 2 3;1 1 2;0 1 2];%密钥
m=length(p1);
p1=reshape(p1,3,m/3);
c= mod(k*p1,26);
c1=reshape(c,1,m);
message_c=char(c1+97);
fprintf('miwen:"%s"\n',message_c);
%%解密过程
k2=inv(k);
c2=char(message_c)-97;%密文字母转数字
c2=reshape(c2,3,m/3);
message_p2= mod(k2*c2,26);
c3=reshape(message_p2,1,m);
message_p2=char(c3+97);
fprintf('jiemi:"%s"\n',message_p2);