古典密码将明文的每一个字母代换为字母表中的另一个字母,代换前现将明文字母用等价的十进制数字代替,使用十进制进行运算。
字母 | 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 |
根据代换是对每个字母逐个进行还是多个字母同时进行,古典密码又分为单表代换密码和多表代换密码。
1. 单表代换密码
1.1 凯撒密码
凯撒(Caesar)密码的加密代换和解密代换分别为:
其中3是加解密所用到的秘钥,加密时,每个字母向后移3位(循环移位,字母x移到a,y移到b,z移到c)。解密时,每个字母向前移3位(循环移位)
1.2 移位变换
移位变换的加解密分别是:
1.3 仿射变换
仿射变换的加解密分别是:
其中a, b是秘钥,为满足 0 ≦ a,b ≦ 25和 gcd(c,26) = 1的整数。 gcd(a, 26) 表示a和26的最大公因子,gcd(a, 26) = 1 表示 a 和26是互质(互素)的, a的-1次在这里表示a的逆元,即
【例1】设仿射变换的加解密分别是:
对 "sec" 加密,对 "vlx" 解密:
s = 18, 7 · 18 + 21 (mod 26)= 17, s → r
e = 4, 7 · 4 + 21 (mod 26)= 23, e → x
c = 2, 7 · 2 + 21 (mod 26)= 9, c → j
所以明文 "sec" 对应密文 “rxj”
所以密文“vlx”对应明文“age”
2. 多表代换密码
多表代换密码首先将明文M分成由n个字母构成的分组M1,M2,...,Mj,对每个分组Mi的加密为:
其中(A,B)是秘钥,A是n×n的可逆矩阵,满足 gcd(|A|, N)=1 (|A| 是行列式)。
对密文分组Ci的解密为:
【例2】设 n=3, N=26, (大小写问题暂时忽略)
明文为 YOUR PIN NO,密文为WGI FGJ TMR,求对应的密文和明文。
【解】将明文按照3个字母分成一组为: YOU RPI NNO,由字母数字对应表得:
所以
查找数字字母表,可得密文为:WGI FGJ TMR
解密时,先求出A的逆
再求
得明文:YOU RPI NNO