仿射密码的解密举例

Python024

仿射密码的解密举例,第1张

本例是按照上例来解密的,也就是用仿射密码解密密文AXG,密钥k=(7,3)。

三个字母对应的数值是0、23、6。解密如下:

由解密Dk(c)=k3(c- k2) mod n(其中(k3 ×k1)mod26 = 1);

可知k3×7=1(mod 26)(其实,就是1/mod26),也就是存在整数t,使7×k3+26t=1。(1)

利用辗转相除法求解k3:

26 = 7 * 3 + 5;(2)(对26作形如:a * b + c,其中 c 就是余数)

7 = 5 * 1 + 2;(3)(作形如: a = c * m + n ,其中 a ,c 是上一步的, m 是乘数 ,n 是余数)

5 = 2 * 2 + 1;(一直循环上一步,直到余数 n = 1)

进行回代:

1 = 5 - 2 * 2

= 5 - (7 - 5 * 1) * 2(第一个2用(3)式来代替,也就是2 = 7 - 5 * 1)

= 3 * 5 - 2 * 7

= 3 * (26 - 7 * 3) - 2 * 7(5用(2)式来代替,也就是5 = 26 - 7 * 3)

= -11 * 7 + 3 * 26(直到不用进行代替,也就是得到只有7和26的表达式)

对比(1)式可知:t = 3 ,k3 = -11;

所以:Dk(c)=k3(c- k2) mod n <=>Dk(c)=-11(c- 3) mod 26 .

对于第一位 A :

-11 ( 0 - 3 ) mod 26 = ( -11 * -3 )mod 26 = 7

对于第二位 X :

-11 ( 23 - 3 ) mod 26 = ( -11 * 20 ) mod 26 = ( -220 ) mod 26 = ( 26 * -9 ) + 14 = 14

( 用计算器求 (-220) mod 26 ,不同的计算器会有不同的结果,百度的计算器求得就是 14 ,直接百度搜索:(-220) mod 26 就可以了,不能直接在计算器上输入 -220mod26 ,那样会得出负数。其实,可以这样算,算出(-11)mod 26 =15,再计算 (15 * 20)mod26 = 14)

对于第三位 G :

-11 ( 6 - 3 ) mod 26 = ( -11 * 3 )mod 26 = ( -33 )mod 26 = 19(计算方法如上)

三个明文值为 7,14,19,对应的明文是HOT,也就是hot。

密码学的知识,不太了解,帮你找了下

http://book.csdn.net/bookfiles/884/10088427852.shtml

往下一点就找到了,网页有点乱~~

6. 仿射密码

加法密码和乘法密码联合起来,就得到了所谓的仿射密码(affine cipher)—— 两种密码与一对密钥的组合。乘法密码使用第一个密钥,加法密码使用第二个密钥。如图3-11所示,仿射密码其实就是被先后使用的两种密码。我们本来可以提出一种有关加密和解密的复杂运算,如C = (P ′ k1 + k2) mod 26和P = ((C - k2) ′ k1-1) mod 26。然而,我们用临时结果(T)表示两种单独的运算,以表明无论什么时候使用密码组合,均需确保在行的另一端要有一个逆,该逆在加密和解密过程中使用的顺序是相反的。如果加法是加密过程中的最终运算,那么减法就是解密过程中的初始运算。

在仿射密码中,明文P和密文C的关系是

图3-11 仿射密码

例3.9

仿射密码使用密钥对,在该密钥对中第一密钥来自集合Z26*,第二密钥来自集合Z26。密钥域的长度是26 ′ 12 = 312。

例3.10

运用仿射密码对带有密钥对(7, 2)的信息“hello”进行解密。

解答

对乘法密钥使用7,对加法密钥使用2,就会得到“ZEBBW”。

例3.11

在模26中,用仿射密码对具有密钥对(7, 2)的信息“ZEBBW”进行解密。

解答

把- 2 o 24 (mod 26)的加法逆加在接收的密文中。然后,再用结果乘以7–1 o 15 (mod 26)的乘法逆,就求出了明文字符。因为2在集合Z26中有一个加法逆,7在集合Z26*中有一个乘法逆,明文正好就是我们在例3.10中所用的。

下式是仿射密码的加密变换 c= (3m+5) mod 26

该密码的密钥空间是多少? 求出消息“hello”对应的密文 ?写出它的解密变换 ?试对密文进行解密 解:

1.密钥空间为 n n =312。

2.hello 五个字母对应的数字分别是 7,4,11,11,14

3.分别加密如下: (3*7+5)mod26=0 (3*4+5)mod26=17 (3*11+5)mod26=12 (3*11+5)mod26=12

(3*14+5)mod26=21