Máy Enigma là một máy mật mã khá phức tạp được người Đức và những người khác sử dụng để mã hóa tin nhắn của họ. Đó là công việc của bạn để thực hiện máy này *.
Bước 1, Xoay
Máy enigma của chúng tôi có 3 khe cho cánh quạt và 5 cánh quạt có sẵn cho mỗi khe này. Mỗi cánh quạt có 26 vị trí khác nhau có thể (từ A
đến Z
). Mỗi cánh quạt có một vị trí notch được xác định trước :
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
Khi nhấn phím, các bước sau đây xảy ra:
- Rôto trong Khe 1 quay
- Nếu rôto trong Khe 1 di chuyển qua rãnh của nó, thì nó sẽ quay rôto trong Khe 2.
- Nếu rôto trong Khe 2 ở vị trí cao nhất (nhưng không di chuyển đến đó), cả rôto 2 và 3 đều quay một lần.
Nếu chúng ta đang sử dụng rotor 1,3,5 và họ là ở các vị trí P,U,H
sau đó trình tự các vị trí là: P,U,H
> Q,U,H
> R,V,H
>S,W,I
Bước 2, Thay thế
Mỗi cánh quạt thực hiện thay thế ký tự đơn giản. Sau đây là biểu đồ của từng cánh quạt ở A
vị trí:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
1 EKMFLGDQVZNTOWYHXUSPAIBRCJ
2 AJDKSIRUXBLHWTMCQGZNPYFVOE
3 BDFHJLCPRTXVZNYEIWGAKMUSQO
4 ESOVPZJAYQUIRHXLNFTGKDCMWB
5 VZBRGITYUPSDNHLXAWMJQOFECK
R YRUHQSLDPXNGOKMIEBFZCWVJAT
Rôto 1 ở vị trí T là PAIBRCJEKMFLGDQVZNTOWYHXUS
, sẽ thay thế chữ cái C
cho I
.
Sau khi ba cánh quạt thực hiện thay thế, phản xạ được nhấn (được liệt kê như R
trên). Nó thực hiện thay thế riêng của mình, và sau đó phản xạ tín hiệu trở lại thông qua các cánh quạt. Các cánh quạt sau đó thực hiện một sự thay thế ngược theo thứ tự ngược lại.
Phương tiện thay thế ngược lại rằng thay vì Rotor 1 thế chỗ A
với E
, nó thay thế E
vớiA
Các khe được lấp đầy với các cánh quạt 1,2,3 tất cả trong vị trí A
. Bức thư Q
đi theo con đường Q>X>V>M
xuyên qua các cánh quạt. M
phản ánh O
, sau đó theo con đường ngược lại của O>Z>S>S
. Do đó, A
được thay thế bằng S
.
Đầu ra đầu vào
Bạn được thông qua:
- Danh sách 3 rôto (dưới dạng số nguyên)
- Danh sách 3 vị trí rôto bắt đầu (dưới dạng chữ cái)
- Một chuỗi cần được mã hóa.
Bạn có thể giả định rằng đầu vào của bạn sẽ được hình thành tốt và tất cả các ký tự sẽ là chữ in hoa, không có dấu cách.
Bạn phải trả lại chuỗi được mã hóa.
Bạn có thể tùy ý chấp nhận các cánh quạt, rãnh và phản xạ làm đầu vào. Đối với những người không thể lấy 95 byte từ điểm số của họ, như95 = ceil(log2(26 letters ^(26*6 rotors +5 notches))/8 bytes)
Các trường hợp thử nghiệm
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
Triển khai của tôi có thể được tìm thấy trên Github . Tôi đã thử nghiệm nó, nhưng tôi có thể có lỗi trong quá trình thực hiện (điều đó có nghĩa là các trường hợp thử nghiệm của tôi có khả năng sai).
* Tôi đã cố gắng làm điều này chính xác nhất có thể , nhưng do các biến thể giữa các máy, tôi có thể có một số chi tiết sai. Tuy nhiên, nhiệm vụ của bạn là thực hiện những gì tôi đã mô tả, ngay cả khi tôi không chính xác. Tôi không bao gồm các plugboard cho đơn giản