希尔密码加密/解密

字母表
密钥

希尔密码(Hill Cipher),是运用基本矩阵论原理的替换密码,每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果mod26。用作加密的矩阵(即密匙)必须是可逆的,否则就不可能译码。只有矩阵的行列式和26互质,才是可逆的。


简介

希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。

每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。


原理

希尔加密算法的基本思想是,将d个明文字母通过线性变换将它们转换为d个密文字母。解密只要作一次逆变换就可以了,密钥就是变换矩阵本身。

希尔密码是多字母代换密码的一种。多字母代换密码可以利用矩阵变换方便地描述,有时又称为矩阵变换密码。令明文字母表为Z,若采用L个字母为单位进行代换,则多码代换是映射f:Z→Z。若映射是线性的,则f是线性变换,可以用Z上的L×L矩阵K表示。若是满秩的,则变换为一一映射,且存在有逆变换K。将L个字母的数字表示为Z上的L维矢量m,相应的密文矢量c,且mK=c,以K作为解密矩阵,可由c恢复出相应的明文c·K=m。

在军事通讯中,常将字符(信息)与数字对应(为方便起见,我们将字符和数字按原有的顺序对应,事实上这种对应规则是极易被破解的):

  abcde…x y z

  12345…242526

  如信息“NOSLEEPPING”对应着一组编码14,15,19,12,5,5,16,16,9,14,7。但如果按这种方式直接传输出去,则很容易被敌方破译。于是必须采取加密措施,即用一个约定的加密矩阵K乘以原信号B,传输信号为C=KB(加密),收到信号的一方再将信号还原(破译)为B=KC。如果敌方不知道加密矩阵,则很难破译。


加密

第一步,设定加密矩阵为K=112-120113,即在希尔密码中设q=26,L=3,选取满秩3×3阶可逆矩阵。我们之所以取3×3可逆方阵,也是为了计算方便,相应的安全性就要低一些。

第二步,将信息14,15,19,12,5,5,16,16,9,14,7分为4个列矩阵:X1=141519,X2=1255,X3=16169,X4=1470,其中X中的“0”是虚设的,其目的是为了与列矩阵的行数一致。列矩阵的行数3和个数4完全依赖于加密后的信息所对应的数字的多少和加密矩阵阶数决定。

第三步,将信息加密。进行矩阵的乘法运算:Y1=KX1=112-120213141519=6716100;Y2=KX2=112-1202131255=27-244;Y3=KX3=112-12021316169=501675;Y4=KX4=112-1202131470=21035。加密后的新码为67,16,100,27,-2,44,50,16,75,21,0。Y中的35虽然是多余的信息,但要连同密码一起发给对方,对方在破解密码时要参与计算。


解密

第一步,求密匙矩阵K的逆矩阵。K可用Mathematica计算。即K=-614-3125-1-3。

第二步,再次进行矩阵乘法运算:X1=-614-3125-1-3671610=141519;X2=-614-3125-1-327-244=1255;X3=-614-3125-1-3501675=16169;X4=-614-3125-1-321035=1470。这样原来的信息编码为14,15,19,12,5,5,16,16,9,14,7。

第三步,对照编码表,即可获得对方发来的信息内容为“NOSLEEPPING”。