阿瑟D 发表于 2009-7-10 09:07:24

希尔密码

对于新手侦探来说,这类案件最为难破。也是侦探必备的技能。通常暗号类型五花八门,纯粹考验的是侦探的实力,对此不做过多解释,但对于暗号密码,有几种常见的类型,下面做一绍 (-8-)   希尔密码  加密  m1 (40)k   例如:密钥矩阵    1 3    0 2    明文:HI THERE    去空格,2个字母一组,根据字母表顺序换成矩阵数值如下,末尾的E为填充字元:    HI TH ER EE    8 20 5 5    9 8 18 5    HI 经过矩阵运算转换为 IS,具体算法参考下面的说明:    |1 3| 8 e1*8+3*9=35 MOD26=9 =I    |0 2| 9 e0*8+2*9=18 MOD26=18=S    用同样的方法把“HI THERE”转换为密文“IS RPGJTJ”,注意明文中的两个E分别变为密文中的G和T。    解密    解密时,必须先算出密钥的逆矩阵,然后再根据加密的过程做逆运算。    逆矩阵算法公式:    |A B| = 1/(AD-BC) * | D -B|    |C D| |-C A|    例如密钥矩阵=    |1 7|    |0 3|    AD-BC=1*3-0*7=3 3*X=1 mod26 所以 X=9    因此    |1 7| 的逆矩阵为: 9 * |3 -7|    |0 3| |0 1|    假设密文为“FOAOESWO”    FO AO ES WO    6 1 5 23    15 15 19 15    9* |3 -7| | 6| = 9*(3*6-7*15)=-783 mod26 = 23=W    |0 1| |15| = 9*(0*6+1*15)= 135 mod26 = 5 =E    所以密文“FOAOESWO”的明文为“WEREDONE”

[ 本帖最后由 阿瑟D 于 2009-7-10 09:13 编辑 ]

樱爵の内 发表于 2009-7-11 13:10:09

我晕啊,LZ你觉得有多少人能明白你题目的意思啊,本人看了就头晕。。。。。

街角ミ抝影 发表于 2009-8-23 15:40:06

看不懂呀.....

黎黎|龙、 发表于 2009-8-29 12:23:25

看不懂、。。......

suimong 发表于 2009-8-29 17:23:12

哈哈希尔密码,数模课要考的内容~不过首先得有矩阵的知识啊……

唯一真相 发表于 2009-9-3 11:19:42

本帖最后由 唯一真相 于 2010-3-16 17:01 编辑

LZ的数值计算上有错误,而且这种东西还是画出矩阵比较好解释,我自己百度了一下希尔密码大致上了解了这种密码的算法,于是给大家详细讲解一下
如果先自己略微了解一下矩阵的知识的话会对这个密码的理解更为容易

首先,希尔密码实际上是一种带替代密码,使用这种密码需要先将26个字母换成对应的数字
LZ换的是A=1 B=2……这样的,但实际上运用的时候我们更习惯将A=0 B=1……Z=25,因为要用到取余运算,这样换更方便运算
于是第一步:字母转换为数字:


第二,把明文中的字母转换成数字矩阵,就换HI THERE这句,我们用LZ的方法,两个字母两个字母地换,当然你也可以整句一起换,但那样计算量会非常大,通常需要用计算机来操作
先换 HI ,把H和I在数字字母表里面对应的数字(也就是7和8)拿出来组成一个矩阵
然后传递和接收密码的双方事先要有一个共同约定好的密钥,也就是加密和解密用的钥匙。
这里我们用LZ的那个,如下


好了,下面就可以开始加密了,方法也很简单,只要用密钥矩阵去乘以明文矩阵就可以了

这里牵扯到矩阵的乘法知识,我们只看我们的这个式子,被乘数是一个2×2的矩阵(两行两列),乘数是一个2×1的矩阵(两行一列),于是他们的结果就是一个2×1的矩阵(两行一列)
那么结果的第一行第一列的数字(31)就是前面那个矩阵的第一行的两个数字(1和3)分别乘以右边矩阵第一列的两个数字(7和8)再求和:1×7+3×8=31
同理,结果的第二行第一列的数字(16)就是前面那个矩阵的第二行的两个数字(0和2)分别乘以右边矩阵第一列的两个数字(7和8)再求和:0×7+2×8=16

矩阵乘法之后将得出的结果模26就可以得到最后的密文矩阵了

mod就是模运算,也就是取余,这里是对31和16两个数字分别除以26,然后取各自的余数
之后再把5和16对应的字母(F和Q)找出来就算是加密完毕了,接着发送的过程就是把FQ发给接收方

解密的过程就是加密的逆运算,这里要对矩阵运算进行逆运算的话需要知道密钥矩阵的逆矩阵
利用初等变换法我们可以得到原密钥矩阵的逆矩阵为:

初等变换法我就不说了,那是通用方法。而对于这种2×2的矩阵我们可以先求出矩阵的行列式的值,方法为左上角的数字乘以右下角的数字减去右上角的数字乘以左下角的数字,对应密钥中的数字就是2×1-3×0=2
然后再把矩阵中的数字按副对角线调换,也就是把左上角的数字于右下角的数字调换位置(1和2调换),最后4个数字分别除以行列式的值,右上角和左下角的数字再取相反数,得到的矩阵就是它的逆矩阵了:

左上角:2÷2=1                右上角:-(3÷2)=-3/2
左下角:-(0÷2)=0       右下角:1÷2=1/2

然后用得到的逆矩阵去乘以密文的矩阵:

运算方法上面提到了,忘了就往上面看看吧

同样,最后把得到的结果模26就可以得到明文矩阵了,再找出字母解密就完成了

7和8,正好对应字母H和I

将HI THERE整句如此加密的话(最后添加凑数字母E),可以得到密文:FQRODIIQ
自己算一算吧

汗,不知道我说清楚了没有。现在我才发现:我的线性代数老师啊,让你讲授那么纠结的东西真是辛苦你了……

慕容飞羽 发表于 2009-9-6 07:58:13

线代。。。某人学的是C,上课没怎么听,期末考试老师几乎把题目全透给我们所以过的。

影羽 发表于 2009-9-13 00:15:27

我今年高二
你们讲的我一点都不懂呀

zhuyuechen 发表于 2009-9-17 19:14:28

.........不懂

蘭花飄香 发表于 2009-9-19 12:10:14

我才上初三,至于这个密码嘛,看不懂。

祥天 发表于 2010-1-1 20:37:10

线代啊,我当年考七十多分吧,最讨厌矩阵变换

cuizg 发表于 2010-1-19 16:25:56

6楼的兄弟非常厚道,没上过线代的年轻人比较难以理解

conan729 发表于 2010-2-10 18:51:44

6楼的很不错!非常感谢~~~解释的很清楚 当时考线性的时候最讨厌了 线性代数是大学的数学课程,所以有些朋友可能还没读到,所以不是很能理解。

b.p.bravo 发表于 2010-2-10 20:29:09

heartz 发表于 2010-2-12 22:37:24

fxコナン 发表于 2010-2-20 10:37:00

学高代的低调路过...

天草薰 发表于 2010-2-24 16:53:02

看不懂的废柴路过,矩阵式是什么呀?

4眼 发表于 2010-3-6 16:26:10

妈呀,我才六年级,对我来说是天书啊

it_182ste 发表于 2010-4-7 19:51:12

学完矩阵变换会感觉希尔密码真是简洁易懂...对矩阵运算不清楚的话真的是看天书了

话说囧唯为什么你大学才学矩阵啊= =

千叶真一 发表于 2010-4-9 12:05:15

{:4_373:}啊啊,传说中的数学啊~
页: [1] 2
查看完整版本: 希尔密码