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)填充到表格中。注意:要判斷是否能完全填充,若不能,哪些單元格不能填充。填充完成後再還原成祕鑰的原先順序;接著,按行(橫向)從上到下,兩兩組合讀出行列座標;最後,根據重新組合的行列座標和字母表方陣還原明文資訊。