一、主要函数解析
1、function [ret] = Hill(M,Str)
M为密钥矩阵
Str为待转换数组
二、注意事项
1、Hill函数的功能仅为转换数组,而不区分加密或解密;当M为密钥矩阵时,Hill输出密文;当M为密钥矩阵的逆时,Hill输出明文
2、该算法中矩阵的逆定义不同于常规定义
三、演示图
四、问题
1、当前仅实现明密文转换,密钥矩阵及其逆矩阵的生成尚未实现
ps:此处提供一密钥矩阵及其逆矩阵供参考
%M: [17 17 5;21 18 21;2 2 19]
%M^-1:[4 9 15;15 17 6;24 0 17]
五、代码
function [ret] = Hill(M,Str)
temp=size(M);
m=temp(1);
S_len=size(Str);
SM_len=round(S_len(2)/m)+(mod(S_len(2),m)>0);
Str_Matrix=zeros(SM_len,m);
for i=1:S_len(2)
Str_Matrix((fix(i/m)+~(mod(i,m)==0)),((mod(i,m)==0)*(m)+(~(mod(i,m)==0))*(mod(i,m))))=Str(i);
end
%i,m
%mod(i,m)
%row:(fix(i/m)+~(mod(i,m)==0))
%line:((mod(i,m)==0)*(m)+(~(mod(i,m)==0))*(mod(i,m)))
T=mod(Str_Matrix*M,26);
ret=zeros(1,SM_len*m);
for i=1:SM_len
ret(1,((i-1)*m+1):i*m)=T(i,:);
end
end