Hill密码的加密,解密和简单破译

Hill密码是一种简单的加密手段。

优点是:

    可以实现同一个字母在不同的上下文中,对应密文中不同的字母。

缺点是:

    加密前明文是几个字母,加密后还是几个字母。容易被穷举。

 

以下,我们都用英文字母举例,比较简单明了

 

下面简要介绍一下加密过程

 

首先,要将26个字母,编号,例如

 

a:1  b:2  c:3  d:4  e:5  f:6  g:7  h:8  i:9  j:10  k:11  l:12  m:13

n:14 o:15  p:16  q:17  r:18 s:19  t:20  u:21 v:22   w:23   x:24  y:25  z:0

 

其次,确定密钥,在这里其实就是加密矩阵,Hill2密码对应的是一个二阶矩阵,Hill n密码对应的就是一个N接矩阵了,

我们这里取二阶,比较简单。如:

取个加密矩阵 A=(1 2;0 3)   说明:大家凑合着看啊,其实是  1 2是一行,0 3是一行。画个矩阵太麻烦了

 

以下说明,矩阵里加了  分号 就表示换行哈

 

 

有了 字母编号表和密钥 就万事具备了。

我们来将下面一段  字母加密

woshigetiancai

首先,将字母两两分组 wo ,sh, ig, et, ia, nc, ai。

这里刚好是偶数个字母,如果是奇数个,就重复一次,最后一个字母,凑成偶数。

其次,查询字母标号表,将分好组的字母,写成向量形式,其实就是写成一个1*2的矩阵(我就讨厌,那些书,

明明就是个1*2矩阵,偏偏要要定义成向量,增加无谓的概念):如

w 对应 23,o对应15,写成向量(23;15)(这个是竖着写的,实在不好意思,矩阵实在不太好画,手头没matlab)

以此类推,得到7组向量,分别是

wo对应的(23;15)      sh对应的(19;8)   ig对应的(9;7)   et对应的(5;20)  ia对应的(9;1) nc对应的(14;3)   ai对应的(1;9)

将 这些向量分别 左乘 密钥 注意:这里矩阵这个东西比较麻烦,不符合乘法交换律,两个矩阵左乘和右乘的结果是不一样的

左乘就是将 密钥放到 左边,右边是 向量  A*P(向量)

又得到7组向量,分别是

(38;45),(27;24),(16;24),(25;60),(10;3),(17;9),(10;27)

 

这时候,我们就遇到了一个问题,我们定义的字母标号表是  0~25的,这里又是45 ,又是 60的,怎么办??

没关系,遇到比25大的,我们就 减26 知道,让数字落在 0~25之间就可以了

例如 原向量 (38;45) 我们就变成了 (12;19),这样就落在我们的字母标号表里了,很简单吧

以此类推,最后得到的 7组向量就变成了

(12;19),(1;24),(14;24),(25;8),(10;3),(17;9),(10,1)

 

最后再将数字通过字母标号表 对照过来就可以了

这里是 lsaxnxyhjcqija  这样就和原字符有很大的区别了吧。

 

hill密码,加密是通过三个手段 一个是:字母标号表,一个是:加密矩阵,就是密钥,最后一个是:加密矩阵的阶数。

如果想简单的通过 穷举 来破解的话 ,还是有一定难度的。

 

 

posted @ 2009-03-22 14:52  江南游子  阅读(17506)  评论(1)    收藏  举报