雙密碼加密與解密
明文
密文
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
1 | B | I | F | D | A |
2 | C | E | G | H | J |
3 | K | L | M | N | O |
4 | P | Q | R | S | T |
5 | U | V | W | X | Y |
什麼是雙密碼?
雙密碼(Bifid Cipher)是一種結合了替換式密碼和置換式密碼的加密算法,它由英國密碼學家 Barrett 在20世紀初發明。與傳統的替換式密碼不同,雙密碼通過兩階段的加密過程,使得加密後的密文更為複雜,提升了加密的強度。雙密碼的加密過程既包括對字母的替換,又包括對這些字母位置的置換,從而為明文提供了更高的安全性。
雙密碼的加密過程主要分為兩個步驟:
- 替換:使用一個字母方陣(通常是5×5的方陣)來進行替換。
- 置換:對替換後的字母位置進行置換,進一步加密。
雙密碼如何加密?
雙密碼的加密過程可以通過以下幾個步驟進行說明:
- 根據祕鑰,生成字母方陣:根據祕鑰和標準字母表(A -Z)生成一個 5×5 的字母方陣。
- 替換階段:將明文中的每個字母按照字母方陣找到其對應的行和列,並記錄下每個字母的位置,每個字母會被替換為其所在的行和列的數位對。
- 置換階段:在替換階段之後,將所有的行號和列號分開,形成兩個數位序列。接下來,將行號和列號按縱向方向,依次整理到表格中。
- 組合新的行列座標:把整理好的表格數據,按行(橫向)從上到下依次讀出;然後,兩兩一組組成新的行列座標。
- 密文生成:根據新的行列座標,從字母方陣中找到對應的字母,組成最終的密文資訊。
示例
假設明文為:“HELLO”,祕鑰為“KEY”。
1. 生成字母方陣
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
1 | K | E | Y | A | B |
2 | C | D | F | G | H |
3 | I | J | L | M | N |
4 | O | P | Q | R | S |
5 | T | U | V | W | X |
2. 獲取明文座標
- H → (2, 5)
- E → (1, 2)
- L → (3, 3)
- L → (3, 3)
- O → (4, 1)
3. 行列座標按縱向整理到表格
明文 | H | E | L | L | O |
---|---|---|---|---|---|
行號 | 2 | 1 | 3 | 3 | 4 |
列號 | 5 | 2 | 3 | 3 | 1 |
4. 橫向重新組合行列座標,並分組
(2, 1), (3, 3), (4, 5), (2, 3), (3, 1)
5. 生成密文
- (2, 1) → C
- (3, 3) → L
- (4, 5) → S
- (2, 3) → F
- (3, 1) → I
所以,HELLO 的加密結果為:CLSFI。
雙密碼如何解密?
雙密碼的解密過程與加密過程是反向操作,根據密文字母取得行列座標後,要把行列座標橫向組合成一個新的字串。再把字串一分為二,形成一個兩行N列的表格;接下來,按列(縱向)方向重新組合行列座標;最後,把新的行列座標轉為字母即可得到明文資訊。
示例
假設我們要用祕鑰“KEY”來解密“CLSFI”
1. 把密文字元轉換成座標
- C → (2, 1)
- L → (3, 3)
- S → (4, 5)
- F → (2, 3)
- I → (3, 1)
2. 橫向組合成一個新的字串
2, 1, 3, 3, 4, 5, 2, 3, 3, 1
3. 把字串一分為二整理到表格中
2 | 1 | 3 | 3 | 4 |
5 | 2 | 3 | 3 | 1 |
4. 按列方向重新組合行列座標
(2, 5), (1, 2), (3, 3), (3, 3), (4, 1)
5. 把新座標解密成明文
- (2, 5) → H
- (1, 2) → E
- (3, 3) → L
- (3, 3) → L
- (4, 1) → O
因此,CLSFI 的對應的明文資訊為:HELLO。