谜机是德国人和其他人用来加密其消息的相当复杂的密码机。实施此机器是您的工作*。
步骤1,旋转
我们的enigma机器有3个转子槽,每个槽有5个可用转子。每个转子都有26个不同的可能位置(从A
到Z
)。每个转子都有一个预定的缺口位置:
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
按键时会发生以下步骤:
- 插槽1中的转子旋转
- 如果插槽1中的转子经过其槽口,则它将旋转插槽2中的转子。
- 如果插槽2中的转子在其槽口中(但不只是在那里移动),则转子2和3都会旋转一次。
如果我们使用转子1,3,5和他们中的位置P,U,H
,然后位置的顺序是:P,U,H
> Q,U,H
> R,V,H
>S,W,I
步骤2,替代
每个转子执行简单的字符替换。下图是该A
位置的每个转子的图表:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
1 EKMFLGDQVZNTOWYHXUSPAIBRCJ
2 AJDKSIRUXBLHWTMCQGZNPYFVOE
3 BDFHJLCPRTXVZNYEIWGAKMUSQO
4 ESOVPZJAYQUIRHXLNFTGKDCMWB
5 VZBRGITYUPSDNHLXAWMJQOFECK
R YRUHQSLDPXNGOKMIEBFZCWVJAT
转子1在位置T is处PAIBRCJEKMFLGDQVZNTOWYHXUS
,它将用字母C
代替I
。
在三个转子进行替换后,反射器受到撞击(如上R
所列)。它执行自己的替换,然后通过转子将信号反射回去。然后,转子以相反的顺序执行反向替换。
的是,代替转子1代反向替换装置A
用E
,它可以代替E
与A
插槽中的转子1,2,3均已安装到位A
。该字母Q
沿Q>X>V>M
通过转子的路径移动。 M
反映到O
,然后遵循的反向路径O>Z>S>S
。因此,A
用代替S
。
输入输出
您通过了:
- 3个转子的列表(整数)
- 3个起始转子位置的列表(以字母表示)
- 需要加密的字符串。
您可以假设输入格式正确,所有字符均为大写字母,没有空格。
您必须返回加密的字符串。
您可以选择接受转子,槽口和反射器作为输入。对于那些不能从他们的分数中取出95个字节的用户,例如95 = ceil(log2(26 letters ^(26*6 rotors +5 notches))/8 bytes)
测试用例
Rotor Position Input Output
4,1,5 H,P,G AAAAAAAAA RPWKMBZLN
1,2,3 A,A,A PROGRAMMINGPUZZLES RTFKHDOVZSXTRMVPFC
1,2,3 A,A,A RTFKHDOVZSXTRMVPFC PROGRAMMINGPUZZLES
2,5,3 U,L,I GIBDZNJLGXZ UNCRACKABLE
我的实现可以在Github上找到。我已经测试过了,但是我的实现中可能存在错误(这意味着我的测试用例可能是错误的)。
*我试图使此尽可能准确,但是由于机器之间的差异,我可能有些细节错误。但是,您的任务是执行我所描述的内容,即使我不准确。为了简单起见,我不包括该插件板