© Teguh Jati Prasetyo/Shutterstock.com
Implementierung einer Enigma

Der Weg zum Geheimalphabet


Im letzten Teil unserer vierteiligen Serie geht es jetzt an die Implementierung der Enigma mit React und JavaScript von der Tastatur über die Eintrittswalze bis zum Lampenfeld.

Nach den vielen Hintergrundinformationen, die in den vorhergehenden Teilen gegeben wurden, kommen wir nun zur Implementierung. Wir werden eine Enigma I mit folgenden Komponenten implementieren:

  • Tastatur

  • Steckerbrett

  • Eintrittswalze

  • drei bewegliche Walzen (Rotoren)

  • eine unbewegliche Umkehrwalze

  • Lampenfeld

Zu Beginn schauen wir uns das Ende des Quellcodes an. Der Quellcode wird nicht komplett abgedruckt, da er ca. 550 Zeilen lang ist, er ist aber online auf www.entwickler.de verfügbar [1]. Dort befindet sich ebenfalls die Datei enigma.css, die das Stylesheet für die Darstellung enthält, welches wir hier nicht abdrucken.

Der Code in Listing 1 konfiguriert unsere Enigma: rotor2Schema, das der Walze 3 entspricht, wird das Verdrahtungsschema des dazugehörigen Walzentyps zugeordnet. rotor2Position ist mit der Walzenposition belegt und rotor2Offset enthält die Verstelldifferenz des sichtbaren Buchstabens zum intern verwendeten Buchstaben. Analog werden die anderen Walzen konfiguriert. Das entspricht einer Rotoreneinstellung „BAS“.

Listing 1

ReactDOM.render( <Enigma rotor2Schema={ROTOR_I_SCHEMA} rotor1Schema={ROTOR_IV_SCHEMA} rotor0Schema={ROTOR_III_SCHEMA} rotor2Position={1} rotor1Position={0} rotor0Position={18} rotor2Offset={0} rotor1Offset={0} rotor0Offset={0} />, document.getElementById('root') );

Die Walzenschemata sind an anderer Stelle als Konstanten definiert:

const ROTOR_I_SCHEMA = ["EKMFLGDQVZNTOWYHXUSPAIBRCJ", "R"]; const ROTOR_III_SCHEMA = ["BDFHJLCPRTXVZNYEIWGAKMUSQO", "W"]; const ROTOR_IV_SCHEMA = ["ESOVPZJAYQUIRHXLNFTGKDCMWB", "K"];

Das erste Element der Liste enthält dabei das Geheimalphabet, das zweite die Position der Übertragskerbe. Bei deren Erreichen wird der weiter links liegende Rotor um eine Position mitrotiert.

Listing 2 enthält den Konstruktor ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang