ADFGVX和ADFGX加密与解密
明文
密文
A | D | F | G | V | X | |
---|---|---|---|---|---|---|
A | A | B | C | D | E | F |
D | G | H | I | J | K | L |
F | M | N | O | P | Q | R |
G | S | T | U | V | W | X |
V | Y | Z | 0 | 1 | 2 | 3 |
X | 4 | 5 | 6 | 7 | 8 | 9 |
什么是ADFGVX密码?
ADFGVX密码是一种多重字母替换密码,最早由德国军方在第一次世界大战期间使用。它结合了替换和置换的原理,使用一个6×6的方阵来加密字母,字母在方阵中被替换成两个字符的组合。ADFGVX密码的名称来自于这个方阵的六个字母(A、D、F、G、V、X),这些字母分别代表了方阵中的行和列,如下图:

在ADFGVX密码中,每个明文字符首先被替换成一个由两个字母组成的行列代码,这些字母根据一个预定的字母表来映射。如字母 M 对应的行列代码为:FA。加密的第二步是将这些由字母组成的代码根据秘钥重新排列,形成一个新顺序,从而最终得到密文。
ADFGVX 与 ADFGX 密码的比较
虽然ADFGVX密码和ADFGX密码都属于同一种密码体系,但它们之间还是存在一些重要的差异。这些差异主要体现在字母表的结构和使用的字符数上,进而影响到加密和解密的复杂性和适用场景。
特性 | ADFGVX密码 | ADFGX密码 |
---|---|---|
字母表大小 | 6×6方阵,包含36个字符(字母 + 数字) | 5×5方阵,包含25个字符(字母) |
行、列号 | A、D、F、G、V、X | A、D、F、G、X |
加密复杂度 | 较高,能加密更多类型的字符,安全性更强 | 较低,仅处理字母,加密复杂度较简单 |
安全性 | 更强,适用于更高安全性需求 | 较弱,适合简单加密需求 |
适用场景 | 适用于包含字母和数字的复杂信息加密,如军事通信等 | 适用于仅包含字母的简单加密需求 |
ADFGVX 和 ADFGX 密码如何加密?
- 准备明文:删除明文中的任何非字母字符(如空格、标点等)。
- 构建字母方阵:设置字母表,根据字母表生成 ADFGVX 或 ADFGX 方阵。
- 替换明文字符:对明文中的每个字母,根据字母方阵找到对应的行和列,替换为一个由两个字母组成的行列代码。
- 构建秘钥表格:根据秘钥重新构建表格,把行列代码写入这个表格,按行填充。
- 表格排序:根据秘钥的字母顺序,重新整理列的顺序。
- 生成密文:逐列读取表格中的代码,获取最终密文。
示例
假设明文为:“HELLO WORLD”,使用默认字母表(A - Z 0 - 9),在ADFGVX模式,用秘钥“KEYWORD”来加密
1. 构建字母方阵
A | D | F | G | V | X | |
---|---|---|---|---|---|---|
A | A | B | C | D | E | F |
D | G | H | I | J | K | L |
F | M | N | O | P | Q | R |
G | S | T | U | V | W | X |
V | Y | Z | 0 | 1 | 2 | 3 |
X | 4 | 5 | 6 | 7 | 8 | 9 |
2. 替换明文字符
- H → (D, D)
- E → (A, V)
- L → (D, X)
- L → (D, X)
- O → (F, F)
- W → (G, V)
- O → (F, F)
- R → (F, X)
- L → (D, X)
- D → (A, G)
3. 构建并填充秘钥表格(横向填充)
K | E | Y | W | O | R | D |
---|---|---|---|---|---|---|
3 | 2 | 7 | 6 | 4 | 5 | 1 |
D | D | A | V | D | X | D |
X | F | F | G | V | F | F |
F | X | D | X | A | G |
4. 排序表格
D | E | K | O | R | W | Y |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
D | D | D | D | X | V | A |
F | F | X | V | F | G | F |
X | F | A | G | X | D |
5. 生成密文
按列读取,获取最终密文:DFDFXDXFDVAXFGVGXAFD。
ADFGVX密码如何解密?
解密过程与加密过程的步骤类似,获取行列字母坐标后,要按照秘钥的字母顺序(A - Z)填充到表格中。注意:要判断是否能完全填充,若不能,哪些单元格不能填充。填充完成后再还原成秘钥的原先顺序;接着,按行(横向)从上到下,两两组合读出行列坐标;最后,根据重新组合的行列坐标和字母表方阵还原明文信息。