维吉尼亚密码
维吉尼亚密码(Vigenere Cipher)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
在开始学习维吉尼亚密码前,首先复习一下凯撒密码。
凯撒密码
凯撒密码是一种比较简单的古典密码,仅仅将明文的每个字符偏移相同的偏移量,自然这种方式的加密破译起来是非常简单的。
因为在密文较多的情况下,可以通过字频统计找出每个字母出现的频率,然后根据对应的字频统计图直接找出密文字母对应的明文,然后计算出偏移量,对所有字符统一进行解密即可。
针对凯撒密码的这个弱点:字母出现的频率易被统计
,于是衍生出了维吉尼亚密码。
加密原理
核心原理
凯撒密码因为字母出现的'频率特征'易被统计分析
所以维吉尼亚密码加密的核心就在于:
`通过多套字符加密明文来混淆字母出现的频率`
例子分析
明文:aaa
加密方式:凯撒/维吉尼亚密加密
1.凯撒加密
明文 | 偏移量 | 密文 |
---|---|---|
a | +3 | d |
a | +3 | d |
a | +3 | d |
密文:ddd
2.维吉尼亚加密
明文 | 偏移量 | 密文 |
---|---|---|
a | +1 | b |
a | +2 | c |
a | +3 | d |
密文:bcd
在例子1中:
加密字符'a'所使用的的偏移量都是一样的
所以字母'a'出现的频率并没有变
则可以通过字频统计直接找到字母之间的对应关系
但在例子2中:
加密字符'a'使用的偏移量不同
'a'被分别替换成了'b'、'c'、'd'
所以字母'a'出现的频率没法直接统计了
则字频分析的方法就暂时失效了
以上便可以简单了解到两种加密方式之间的关系,甚至可以发现,其实维吉尼亚密码就像是采用不同偏移量进行加密的多套凯撒密码的组合
。
加密方法(表格法)
在学习加密方法之前,必须先看懂该表格
用来加密解密的维吉尼亚表格
这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。
- 加密公式:
C=(P+K)%26
- C:密文(Ciphertext)
- P:明文(Plaintext)
- K:密钥(Key)
下文默认 字母表行号=密钥=Key(0~25), 首行为明文
具体使用哪一行字母表进行编译是基于密钥(0~25)进行的,在加密过程中会不断地变换。
例子:
明文:abcde
密钥:owlow(由关键词重复生成,这里使用:owl)
#密钥:14,22,11,14,22(对应行号)
1.使用维吉尼亚表格进行加密:
明文 | 密钥 | 密文 | 说明 |
---|---|---|---|
a | o(14) | o | a列与o行相交处,即为密文o |
b | w(22) | x | b列与w行相交处,即为密文x |
c | l(11) | n | c列与l行相交处,即为密文n |
d | o(14) | r | d列与o行相交处,即为密文r |
e | w(22) | a | e列与w行相交处,即为密文a |
所以得到密文:oxnra
。
2.使用同余进行加密:
用数字0~25代替a ~ z,则维吉尼亚的加密方式可用同余的表示为:
解密原理
解密的过程与加密相反。
这里简单以一个例子说明:
密文:oxn
密钥:owl
1.使用维吉尼亚表格解密:
密文 | 密钥 | 明文 | 说明 |
---|---|---|---|
o | o | a | 看o行,找密文o所在列,其列首即为明文a |
x | w | b | 看w行,找密文x所在列,其列首即为明文b |
n | l | c | 看o行,找密文n所在列,其列首即为明文c |
解密得到明文:abc
2.使用同余解密:
用数字0~25代替a ~ z,则维吉尼亚的解密方式可用同余的表示为:
解密方法
卡希斯基试验
基本原理:
类似the这样的常用单词
如果它们被同样的密钥字母进行了加密
那么它们在密文中会重复出现
可利用该点破译出密钥的长度
特点:
对于更长的段落此方法更为有效
因为通常密文中重复的片段会更多
详解见卡希斯基试验
弗里德曼试验(重合指数法)
基本原理:
使用重合指数
描述密文字母频率的不匀性
从而可估计密钥长度
特点:
只是一种估计,会随着文本长度的增加而更为精确
详解见弗里德曼试验
频率分析
基本原理:
一旦能够确定密钥的长度
密文就能重新写成多列,列数与密钥长度对应
这样的每一列其实就是一个凯撒密码
而此密码的密钥则对应于维吉尼亚密码密钥的相应字母
详解见频率分析