Enigma makinesi, Almanlar ve diğerleri tarafından mesajlarını şifrelemek için kullanılan oldukça karmaşık bir şifreleme makinesidir. Bu makineyi uygulamak sizin işinizdir *.
Adım 1, Döndürme
Enigma makinemizde rotorlar için 3 yuva ve bu yuvaların her biri için 5 mevcut rotor vardır. Her bir rotor (26 olası farklı pozisyonlara sahip A
için Z
). Her rotorun önceden tanımlanmış bir çentik konumu vardır :
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
Tuşa basıldığında aşağıdaki adımlar gerçekleşir:
- Yuva 1'deki rotor döner
- Yuva 1'deki rotor çentiğini geçtikten sonra rotoru Yuva 2'de döndürür.
- Yuva 2'deki rotor çentikteyse (ancak sadece oraya hareket etmediyse), hem rotor 2 hem de 3 bir kez döner.
Biz rotorlar 1,3,5 kullanılmakta ve bu konumlarda ise P,U,H
o zaman pozisyon sekansı: P,U,H
> Q,U,H
> R,V,H
>S,W,I
2. Adım, Değiştirme
Rotorların her biri basit bir karakter ikamesi yapar. Aşağıdaki, A
konumdaki rotorların her birinin bir grafiğidir :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
1 EKMFLGDQVZNTOWYHXUSPAIBRCJ
2 AJDKSIRUXBLHWTMCQGZNPYFVOE
3 BDFHJLCPRTXVZNYEIWGAKMUSQO
4 ESOVPZJAYQUIRHXLNFTGKDCMWB
5 VZBRGITYUPSDNHLXAWMJQOFECK
R YRUHQSLDPXNGOKMIEBFZCWVJAT
T konumundaki Rotor 1, PAIBRCJEKMFLGDQVZNTOWYHXUS
yerine mektubu C
koyacaktır I
.
Üç rotor yerine geçtikten sonra reflektör vurulur ( R
yukarıdaki gibi listelenir ). Kendi yerine koyma işlemini gerçekleştirir ve daha sonra sinyali rotorlara geri yansıtır. Rotorlar daha sonra ters sırada bir ters ikame gerçekleştirir.
Bunun yerine 1 ikame Rotor Ters ikame araçları A
ile E
, ikame ettiği E
ileA
Yuvalar, hepsi yerinde 1,2,3 rotor ile doldurulur A
. Mektup , rotorlar Q
arasındaki yolu izler Q>X>V>M
. M
yansıtır O
, sonra ters yolunu izler O>Z>S>S
. Bu nedenle, A
ile değiştirilir S
.
Giriş çıkış
Siz geçtiniz:
- 3 rotor listesi (tamsayı olarak)
- 3 başlangıç rotor konumunun listesi (harf olarak)
- Şifrelenmesi gereken bir dize.
Girişinizin iyi oluşturulacağını ve tüm karakterlerin büyük harf olacağını, boşluk olmayacağını varsayabilirsiniz.
Şifrelenmiş dizeyi döndürmelisiniz.
İsteğe bağlı olarak rotorları, çentikleri ve reflektörleri giriş olarak kabul edebilirsiniz. Puanlarından 95 bayt çıkaramayanlar için,95 = ceil(log2(26 letters ^(26*6 rotors +5 notches))/8 bytes)
Test senaryoları
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
Uygulamam Github'da bulunabilir . Test ettim, ancak uygulamamda hatalar olabilir (bu benim test durumlarımın muhtemelen yanlış olduğu anlamına gelir).
* Bunu olabildiğince doğru yapmaya çalıştım , ancak makineler arasındaki farklılıklar nedeniyle bazı ayrıntılar yanlış olabilir. Ancak göreviniz yanlış olsam bile tarif ettiğim şeyi uygulamaktır. Basitlik için panoya dahil etmiyorum