Classical-Cipher
Enigma 旋轉範例
根據維基百科:BDZGO是使用轉子 I、II、III 和反射器 B 在字母 AAAAA 上進行謎題時的預期結果。
ABCDEFGHIJKLMNOPQRSTUVWXYZ | Alphabet EKMFLGDQVZNTOWYHXUSPAIBRCJ | Rotor I wiring AJDKSIRUXBLHWTMCQGZNPYFVOE | Rotor II wiring BDFHJLCPRTXVZNYEIWGAKMUSQO | Rotor III wiring YRUHQSLDPXNGOKMIEBFZCWVJAT | Reflector B wiring ABCDEFGHIJKLMNOPQRSTUVWXYZ | Reflector B wiring
如果我們現在跟踪第一個 A:
A-E | etw to rotor I E-A | rotor I to rotor II A-B | rotor II to rotor III B-R | Reflector B R-X | rotor III to rotor II X-V | rotor II to rotor I V-I | rotor I to etw
所以輸出是 I 而不是 B,我的錯誤在哪裡?
正如我在之前對相關問題的回答中所指出的,您範例中的轉子排列是使用僅顯示排列的輸出字母表的速記符號編寫的,並隱含假設輸入字母表始終為
ABCDEFGHIJKLMNOPQRSTUVWXYZ
。也就是說,你的轉子描述:EKMFLGDQVZNTOWYHXUSPAIBRCJ | Rotor I wiring AJDKSIRUXBLHWTMCQGZNPYFVOE | Rotor II wiring BDFHJLCPRTXVZNYEIWGAKMUSQO | Rotor III wiring
實際上描述了以下排列:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ | Rotor I EKMFLGDQVZNTOWYHXUSPAIBRCJ ABCDEFGHIJKLMNOPQRSTUVWXYZ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ | Rotor II AJDKSIRUXBLHWTMCQGZNPYFVOE ABCDEFGHIJKLMNOPQRSTUVWXYZ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ | Rotor III BDFHJLCPRTXVZNYEIWGAKMUSQO
此外,您的範例加密還有兩個其他問題:
- 您以錯誤的順序應用轉子排列;轉子通常從左到右排列,但從輸入/輸出到反射器的接線是從右到左。所以在你的例子中,實際上應該首先應用轉子 III,然後是轉子 II,最後是轉子 I(然後是反射器和反向轉子,順序相反)。
- 在加密每個字母之前,轉子是步進的。因此,如果您從 A 位置的所有轉子開始,當消息的第一個字母被加密時,最右邊的轉子(即此處的轉子 III)將已經旋轉到 B 位置。這意味著您必須將字母在字母表中向右移動一步,然後才能進入轉子,然後在離開轉子後向左移動一步。
綜上所述,第一個字母的正確路徑是:
A
⤑B
→D
⤑C
(轉子 III 在位置 B)C
⤑C
→D
⤑D
(轉子 II 在位置 A)D
⤑D
→F
⤑F
(轉子 I 在位置 A)F
↔S
(反射器 B)S
⤑S
→S
⤑S
(轉子 I 在位置 A,反向)S
⤑S
→E
⤑E
(轉子 II 在位置 A,反向)E
⤑F
→C
⤑B
(轉子 III 在位置 B,反向)對於每個轉子,有效地應用了三種排列:到轉子目前位置的字母移位(即位置 A 0 步,位置 B 1 步,位置 C 2 步等),固定轉子接線排列和最後反向從轉子的位置移回。
在上面的列表中,我使用虛線箭頭 ⤑ 表示換檔,使用實線箭頭 → 表示轉子接線排列(以及雙頭箭頭 ↔ 表示反射器)。在這個例子中,三個轉子中的兩個仍然在位置 A,所以對它們來說,移位沒有影響,但為了完整起見,我還是展示了它們。此外,偶然地,轉子中的接線碰巧將字母映射
S
到自身。