维吉尼亚密码
维吉尼亚密码可看作凯撒密码强化版。它通过引入一个密钥词,成功克服了凯撒密码密钥空间小和易受词频分析攻击的主要弱点。
核心思想
维吉尼亚密码的核心改进在于:使用多个不同的凯撒密码,即为明文中不同的字母****应用不同的偏移量。
这个“多个不同的偏移量”的序列,就是由一个密钥词来决定的。
加密过程
1. 准备密钥:
- 选择一个密钥词。
- 将这个密钥词重复书写,直到它的长度与明文一致。
2. 建立对应关系:
- 通常我们建立一个表格,将字母 A-Z 对应数字 0-25。
3. 加密运算:
对于明文的每一个字母,找到其上方对应的密钥字母。
将明文字母和密钥字母都转换为数字(A=0, B=1, …, Z=25)。
使用公式计算密文: C_i = (P_i + K_i) mod 26
C_i:第 i 个密文字母的数字
P_i:第 i 个明文字母的数字
K_i:第 i 个密钥字母的数字
再将得到的数字转换回字母
举个栗子:
明文: ATTACKATDAWN
密钥词:KEY
第一步:对齐明文和密钥
明文: A T T A C K A T D A W N
密钥: K E Y K E Y K E Y K E Y
第二步:逐个字母加密
明文字母 A (0),密钥字母 K (10)
· 加密:(0 + 10) = 10 -> K
明文字母 T (19),密钥字母 E (4)
· 加密:(19 + 4) = 23 -> X
明文字母 T (19),密钥字母 Y (24)
· 加密:(19 + 24) = 43 -> 43 mod 26 = 17 -> R
明文字母 A (0),密钥字母 K (10)
· 加密:(0 + 10) = 10 -> K
明文字母 C (2),密钥字母 E (4)
· 加密:(2 + 4) = 6 -> G
明文字母 K (10),密钥字母 Y (24)
· 加密:(10 + 24) = 34 -> 34 mod 26 = 8 -> I
…(以此类推)
最终密文: KXRKGIKXPRKB
解密:
解密是加密的逆过程,使用相同的密钥词。
对齐密文和密钥(与加密时相同):
密文: K X R K G I K X P R K B
密钥: K E Y K E Y K E Y K E Y
使用解密公式:
- P_i = (C_i - K_i) mod 26
- 注意:如果 C_i - K_i 是负数,加上 26 后再取模。
解密示例:
- 密文字母 K (10),密钥字母 K (10)
- 解密:(10 - 10) = 0 -> A
- 密文字母 X (23),密钥字母 E (4)
- ****解密:(23 - 4) = 19 -> T
- …(以此类推)
即可恢复出原始明文 ATTACKATDAWN。
为何比凯撒密码更安全?
- 多表替代:这是最关键的一点。同一个明文字母在不同位置可能被加密成不同的密文字母。
在上面的例子中,明文字母 A 在第一个位置被加密成了 K,在第四个位置也被加密成了 K,但在第十个位置却被加密成了 R。
同样,密文字母 K 可能对应明文 A(当密钥是K时),也可能对应明文 Q(当密钥是A时)等。
这打破了原始明文的单字母频率分布,使得简单的词频分析失效。
- 更大的密钥空间:密钥不再是 1-25 的一个数字,而是一个任意长度的单词。可能的密钥数量巨大,使得暴力破解变得不现实(尽管对于现代计算机来说,如果密钥较短,仍然可以破解)。
维吉尼亚密码的破译:
尽管很强大,但维吉尼亚密码最终还是被破译了。主要方法是:
- 卡西斯基试验:
- 在密文中寻找重复的片段。
- 这些重复片段之间的距离很可能是密钥长度的倍数。
- 通过计算这些距离的最大公约数,可以推测出密钥的可能长度。
- 重合指数法:
- 这是一种更可靠的方法。通过计算密文与自身偏移后的重合指数,来推测密钥长度。
- 一旦知道了密钥长度,就可以将密文分成若干组(第1、第6、第11…个字母为一组,这些字母都是用同一个凯撒密码加密的)。
- 然后对每一组使用词频分析(因为每一组内部都是一个简单的单表替换密码),分别解出密钥的每一个字母。

