发布时间 : 星期五 文章数学实验—Hill密码的加密、解密与破译(DOC)更新完毕开始阅读
Hill密码的加密、解密与破译
Y(i)=8; elseif X(i)=='H' Y(i)=4; elseif X(i)=='I' Y(i)=18; elseif X(i)=='J' Y(i)=25; elseif X(i)=='K' Y(i)=0; elseif X(i)=='L' Y(i)=16; elseif X(i)=='M' Y(i)=13; elseif X(i)=='N' Y(i)=7; elseif X(i)=='O' Y(i)=3; elseif X(i)=='P' Y(i)=1; elseif X(i)=='Q' Y(i)=19; elseif X(i)=='R' Y(i)=6; elseif X(i)=='S' Y(i)=12; elseif X(i)=='T' Y(i)=24; elseif X(i)=='U' Y(i)=21; elseif X(i)=='V' Y(i)=17; elseif X(i)=='W' Y(i)=14; elseif X(i)=='X' Y(i)=22; elseif X(i)=='Y'
黔南民族师范学院数学实验报告
Y(i)=11; elseif X(i)=='Z' Y(i)=9;
else error('请正确输入A到Z的字母') end end end
4、将数字转换为字母: function Y=num_letter(X)
%按照数学实验书P111表10.4将数字转化为字母 %参数说明,输入项:X由每个数字组成的行向量 % 输出项:Y由每个字母组成的字符串 %例如5 23 2 20对应的数字是A B C D %其调用格式为:Y=num_letter([5,23,2,20]).
n=length(X); if rem(X,2)~=0 X(n+1)=X(n); n=n+1; end
for i=1:n
if X(i)==5 Y(i)='A'; elseif X(i)==23 Y(i)='B'; elseif X(i)==2 Y(i)='C'; elseif X(i)==20 Y(i)='D'; elseif X(i)==10 Y(i)='E'; elseif X(i)==15 Y(i)='F'; elseif X(i)==8 Y(i)='G'; elseif X(i)==4 Y(i)='H'; elseif X(i)==18 Y(i)='I';
- VIII -
Hill密码的加密、解密与破译
elseif X(i)==25 Y(i)='J'; elseif X(i)==0 Y(i)='K'; elseif X(i)==16 Y(i)='L'; elseif X(i)==13 Y(i)='M'; elseif X(i)==7 Y(i)='N'; elseif X(i)==3
Y(i)='O'; elseif X(i)==1 Y(i)='P'; elseif X(i)==19 Y(i)='Q'; elseif X(i)==6 Y(i)='R'; elseif X(i)==12 Y(i)='S'; elseif X(i)==24 Y(i)='T'; elseif X(i)==21 Y(i)='U'; elseif X(i)==17 Y(i)='V'; elseif X(i)==14 Y(i)='W'; elseif X(i)==22 Y(i)='X'; elseif X(i)==11 Y(i)='Y'; elseif X(i)==9 Y(i)='Z';
else error('请正确输入0到25的数字') end end end
将明文x按加密矩阵A进行加密:
黔南民族师范学院数学实验报告
function Y=Hill2_encrypt(x,A) %将明文x按加密矩阵A加密 %
A1=Hill2_key(A); x1=letter_num(x); n=length(x1); for i=1:2:n
x2=[x1(i);x1(i+1)]; y1=mod(A*x2,26); y(i)=y1(1); y(i+1)=y1(2); end
Y=num_letter(y); End
在MATLAB命令窗口下输入: A=[1 4;0 3];
x='HILLCRYPTOGRAPHICSYSTEMISTRADITIONAL' Y=Hill2_encrypt(x,A) Y =
TCCXKIFOEZRIZOTCTENESHNCHDKFWCICAUVX 解密:
function Y=Hill2_solution(x,A) %将密文按加密矩阵A解密 %
A1=Hill2_key(A); x1=letter_num(x); n=length(x1); for i=1:2:n
x2=[x1(i);x1(i+1)]; y1=mod(A1*x2,26); y(i)=y1(1); y(i+1)=y1(2); end
Y=num_letter(y); End
在MATLAB命令窗口下输入: A=[1 4;0 3];
x=' TCCXKIFOEZRIZOTCTENESHNCHDKFWCICAUVX '
- X -