三分密碼加密與解密
明文
密文
1 | 2 | 3 | |
---|---|---|---|
1 | A | B | C |
2 | D | E | F |
3 | G | H | I |
1 | 2 | 3 | |
---|---|---|---|
1 | J | K | L |
2 | M | N | O |
3 | P | Q | R |
1 | 2 | 3 | |
---|---|---|---|
1 | S | T | U |
2 | V | W | X |
3 | Y | Z | _ |
什麼是三分密碼?
三分密碼(Trifid Cipher)是一種基於位置替換的密碼算法,它是由法國密碼學家Felix Delastelle於1901年提出的。與傳統的替換密碼不同,三分密碼在加密過程中不僅依賴於字母的順序,還採用了三個維度來分配字母的位置。它通過將字母表分為三組,並將明文字母轉換為三維座標(層、行、列)來加密文本。在加密過程中,三分密碼將明文中的字母位置映射到三維坐標系,之後按照一定的規則將座標重新排列,生成密文。由於三維座標組合的複雜性,三分密碼提供了比傳統替換密碼更高的安全性。
三分密碼如何加密?
加密過程包括以下步驟:
- 準備明文:去除明文中的空格、標點符號等非字母字元。
- 確定三分密碼字母表:三分密碼使用一個標準的字母表,將字母按層、行、列的方式分配到一個三維坐標系。
- 將明文字母轉換為三維座標:每個字母的位置由其所在的層、行和列來表示。
- 將三維座標整理到表格中:將每個字母的三維座標按層、行、列,垂直寫到表格中,即表格有三行:第一行表示字母所在的層,第二行表示字母所在的行,第三行表示字母所在的列。
- 按組大小分組:將整理好的表格,根據組大小按列進行分組。
- 每組橫向重新組合座標:將每組的座標從上到下橫向組合,每三個一組,重新得到新的座標。
- 生成密文:根據重新排列後的座標,在三維坐標系中找到對應的字母替換成密文。
示例
假設明文為 “HELLO WORLD”,字母表為26個英文字母和一個字元:“ABCDEFGHIJKLMNOPQRSTUVWXYZ_”,組大小為4。
1. 根據字母表生成三維坐標系
① | 1 | 2 | 3 |
---|---|---|---|
1 | A | B | C |
2 | D | E | F |
3 | G | H | I |
② | 1 | 2 | 3 |
---|---|---|---|
1 | J | K | L |
2 | M | N | O |
3 | P | Q | R |
③ | 1 | 2 | 3 |
---|---|---|---|
1 | S | T | U |
2 | V | W | X |
3 | Y | Z | _ |
2. 將字母轉換為三維座標
- H → (1, 3, 2)
- E → (1, 2, 2)
- L → (2, 1, 3)
- L → (2, 1, 3)
- O → (2, 2, 3)
- W → (3, 2, 2)
- O → (2, 2, 3)
- R → (2, 3, 3)
- L → (2, 1, 3)
- D → (1, 2, 1)
3. 將三維座標整理到表格中
明文 | H | E | L | L | O | W | O | R | L | D |
---|---|---|---|---|---|---|---|---|---|---|
層級 | 1 | 1 | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 1 |
行號 | 3 | 2 | 1 | 1 | 2 | 2 | 2 | 3 | 1 | 2 |
列號 | 2 | 2 | 3 | 3 | 3 | 2 | 3 | 3 | 3 | 1 |
4. 按組大小分組
H | E | L | L |
---|---|---|---|
1 | 1 | 2 | 2 |
3 | 2 | 1 | 1 |
2 | 2 | 3 | 3 |
O | W | O | R |
---|---|---|---|
2 | 3 | 2 | 2 |
2 | 2 | 2 | 3 |
3 | 2 | 3 | 3 |
L | D |
---|---|
2 | 1 |
1 | 2 |
3 | 1 |
5. 每組橫向重新組合座標
- 第一組:(1, 1, 2), (2, 3, 2), (1, 1, 2), (2, 3, 3)
- 第二組:(2, 3, 2), (2, 2, 2), (2, 3, 3), (2, 3, 3)
- 第三組:(2, 1, 1), (2, 3, 1)
6. 將座標轉為密文字母
- (1, 1, 2) → B
- (2, 3, 2) → Q
- (1, 1, 2) → B
- (2, 3, 3) → R
- (2, 3, 2) → Q
- (2, 2, 2) → N
- (2, 3, 3) → R
- (2, 3, 3) → R
- (2, 1, 1) → J
- (2, 3, 1) → P
因此,“HELLO WORLD”的加密結果為:“BQBRQNRRJP”
三分密碼如何解密?
解密過程是加密的反向操作,前 3 個步驟一致,第 4 步開始就不相同,具體差異如下:
- 將三維座標整理到表格中:按照組大小橫向填充座標,每組有三行,每組填充完成後,再填充下一組,直至填充完成。最後一組要根據行數動態計算列數。
- 重新組合座標:每組有三行,第一行表示層號,第二行表示行號,第三行表示列號,按照縱向方向重新組合三維座標。
- 解密成明文:根據重新排列後的三維座標,在坐標系中找到對應的字母,生成明文。
示例
假設要對密文“BQBRQNRRJP”進行解密,組大小為4,字母表與加密時一致。
1. 獲得密文字元的三維座標
- B → (1, 1, 2)
- Q → (2, 3, 2)
- B → (1, 1, 2)
- R → (2, 3, 3)
- Q → (2, 3, 2)
- N → (2, 2, 2)
- R → (2, 3, 3)
- R → (2, 3, 3)
- J → (2, 1, 1)
- P → (2, 3, 1)
2. 將三維座標按組大小橫向整理到表格中
1 | 1 | 2 | 2 |
3 | 2 | 1 | 1 |
2 | 2 | 3 | 3 |
2 | 3 | 2 | 2 |
2 | 2 | 2 | 3 |
3 | 2 | 3 | 3 |
2 | 1 |
1 | 2 |
3 | 1 |
3. 按列重新組合座標
- 第一組:(1, 3, 2), (1, 2, 2), (2, 1, 3), (2, 1, 3)
- 第二組:(2, 2, 3), (3, 2, 2), (2, 2, 3), (2, 3, 3)
- 第三組:(2, 1, 3), (1, 2, 1)
4. 解密成明文
- (1, 3, 2) → H
- (1, 2, 2) → E
- (2, 1, 3) → L
- (2, 1, 3) → L
- (2, 2, 3) → O
- (3, 2, 2) → W
- (2, 2, 3) → O
- (2, 3, 3) → R
- (2, 1, 3) → L
- (1, 2, 1) → D
因此,“BQBRQNRRJP”的解密結果為:“HELLOWORLD”。