多表代换密码
A | B | C | D | E | F | G | H | I | J | K | L | M |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
首先将明文M分为由n个字母构成的分组M1,M2,...,Mj,每个分组Mi的加密为:
Ci ≡ AMi + B(mod N)
其中(A, B)是秘钥,A是n*n的可逆矩阵。
每个密文Ci的解密为:
Mi ≡ A-1(Ci - B)(mod N)
例子
设n=3,N=26,明文为“YOUR PIN NO IS FOUR ONE TWO SIX”
$$ A= \begin{Bmatrix} 11 & 2 & 19 \\ 5 & 23 & 25 \\ 20 & 7 & 17 \end{Bmatrix} $$
$$ B=\begin{Bmatrix} 0 \\ 0 \\ 0 \end{Bmatrix} $$
加密
将明文按每三个字母重新分组:“YOU RPI NNO ISF OUR ONE TWO SIX”。
代换为数字表示:
M1 = 24 14 20
M2 = 17 15 8
M3 = 13 13 14
M4 = 8 18 5
M5 = 14 20 17
M6 = 14 13 4
M7 = 19 22 14
M8 = 18 8 23
根据公式 Ci ≡ AMi + B(mod N) 计算Ci:
C1 = AM1 + B(mod N)
= A[0][0]×M1[0] + A[0][1]×M1[1] + A[0][2]×M1[2] + B[0](mod 26)
= 11×24 + 2×14 + 19×20 + 0(mod 26)
= 672(mod 26)
= 22
= A[1][0]×M1[0] + A[1][1]×M1[1] + A[1][2]×M1[2] + B[1](mod 26)
= 5×24 + 23×14 + 25×20 + 0(mod 26)
= 942(mod 26)
= 6
= A[2][0]×M1[0] + A[2][1]×M1[1] + A[2][2]×M1[2] + B[2](mod 26)
= 20×24 + 7×14 + 17×20 + 0(mod 26)
= 918(mod 26)
= 8
C1 = (22 6 8) = WGI
= A[0][0]×M2[0] + A[0][1]×M2[1] + A[0][2]×M2[2] + B[0](mod 26)
= 11×17 + 2×15 + 19×8 + 0(mod 26)
= 5
= A[1][0]×M2[0] + A[1][1]×M2[1] + A[1][2]×M2[2] + B[1](mod 26)
= 5×17 + 23×15 + 25×8 + 0(mod 26)
= 6
= A[2][0]×M2[0] + A[2][1]×M2[1] + A[2][2]×M2[2] + B[2](mod 26)
= 20×17 + 7×15 + 17×8 + 0(mod 26)
= 9
C2 = (5 6 9) = FGJ
C3 = (19 12 17) = TMR
C4 = (11 7 7) = LHH
C5 = (23 19 7) = XTH
C6 = (22 1 23) = WBX
C7 = (25 15 18) = ZPS
C8 = (1 17 1) = BRB
密文为:WGI FGJ TMR LHH XTH WBX ZPS BRB
解密
Mi ≡ A-1(Ci - B)(mod N)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。