เครื่อง Enigma เป็นเครื่องเข้ารหัสที่ค่อนข้างซับซ้อนซึ่งชาวเยอรมันและคนอื่นใช้ในการเข้ารหัสข้อความ เป็นหน้าที่ของคุณที่จะใช้เครื่องนี้ *
ขั้นตอนที่ 1 การหมุน
เครื่องปริศนาของเรามี 3 ช่องสำหรับโรเตอร์และโรเตอร์ที่มี 5 ช่องสำหรับแต่ละช่องเหล่านี้ โรเตอร์แต่ละตัวมีตำแหน่งที่เป็นไปได้ 26 แบบที่แตกต่างกัน (จากA
ถึงZ
) โรเตอร์แต่ละตัวมีตำแหน่งรอยที่กำหนดไว้ล่วงหน้า:
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
เมื่อกดปุ่มจะเกิดขั้นตอนต่อไปนี้:
- โรเตอร์ใน Slot 1 หมุน
- ถ้าโรเตอร์ในช่อง 1 เคลื่อนผ่านรอยบากมันก็จะหมุนโรเตอร์ในช่อง 2
- ถ้าโรเตอร์ใน Slot 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 นั้น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
Input / Output
คุณผ่าน:
- รายการของ 3 rotors (เป็นจำนวนเต็ม)
- รายการ 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 ฉันได้ทดสอบแล้ว แต่ฉันอาจมีข้อบกพร่องในการใช้งานของฉัน (ซึ่งหมายความว่ากรณีทดสอบของฉันมีแนวโน้มผิด)
* ฉันพยายามทำให้ถูกต้องที่สุดแต่เนื่องจากความแตกต่างระหว่างเครื่องฉันอาจมีรายละเอียดบางอย่างผิดพลาด อย่างไรก็ตามงานของคุณคือการนำสิ่งที่ฉันอธิบายไปมาแม้ว่าฉันจะไม่ถูกต้องก็ตาม ฉันไม่ได้รวมปลั๊กอินไว้เพื่อความเรียบง่าย