三分密码加密与解密
明文
密文
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”。