Kryptographie - Enigma

zerix

Hausmeister
Moderator
@zerix: Bist du sicher, dass das richtig ist? Denn laut Aufgabe heisst es:


Aber durch dein rb() und rf() ist mir erst klar geworden, dass die Rotation auch in die andere Richtung gehen kann - vielleicht ist das ja in der Aufgabenstellung mit "jeweils in umgekehrter Richtung" gemeint. Dann hiesse das, dass die Walzen bei Eingabe eines einzigen Buchstabens in zwei verschiedene Richtungen drehen (können). In der Umsetzung erhöht das die Anzahl zu berücksichtigender Möglichkeiten; bisher hatten meine Walzen nur die Vorwärts-Richtung gekannt.

rb ist rückwärts rotieren. Das ist für Walze 1 und 2 gegeben, in welche Richtung Walze 3 rotiert ist gar nicht angegeben, d.h. sie könnte in die andere Richtung rotieren.
Nein, das "in umgekehrter Richtung" bedeutet was anderes.
Wenn man W verschlüsseln möchte, wird bei Walze 1 an Stelle 'W' geschaut (W1['W']). Beim Rückweg wird dann der Buchstabe der Umkehrrolle genommen, bspw. 'W' und es wird dann geschaut, wo steht das 'W' und dann wird mit den jeweiligen Index weitergemacht. Das wäre in Grundstellung das 'N'. Das heißt bei Walze 3 steht am Index 'N' das 'W'. W3['N'] = 'W'. Mit dem 'N' geht man dann zur Walze 2 und macht das dort mit den 'N'.


Viele Grüße
Sascha
 

StormChaser

Mitglied
Dann habe ich Aufgabe noch falscher verstanden. Bei mir geht ein Buchstabe durch 7 Chiffrierungen bis sein Chiffrat ausgegeben wird. Wenn schon das falsch ist, kann ich ja nie auf die Lösung kommen, ganz abgesehen von den Rotationen :)
 

zerix

Hausmeister
Moderator
Dann habe ich Aufgabe noch falscher verstanden. Bei mir geht ein Buchstabe durch 7 Chiffrierungen bis sein Chiffrat ausgegeben wird. Wenn schon das falsch ist, kann ich ja nie auf die Lösung kommen, ganz abgesehen von den Rotationen :)
Geht es ja mehr oder weniger auch.
Bsp:

Eingabe: 'W'
Walze1 ['W']: 'U'
Walze2 ['U']: 'P'
Walze3 ['P']: 'H'
Umkehr['H']: 'D'
Walze3 ['G'] : 'D'
Walze2 ['R']: 'G'
Walze1 ['I']: 'R'

Damit sollte 'W' zu 'I' verschlüsselt werden. Da Enigma mit der Verschlüsselungsmethode auch entschlüsselt, sollte 'I' zu 'W' werden.

Eingabe: 'I'
Walze1 ['I']: 'R'
Walze2 ['R']: 'G'
Walze3 ['G']: 'D'
Umkehr['D']: 'H'
Walze3 ['P'] : 'H'
Walze2 ['U']: 'P'
Walze1 ['W']: 'U'

Damit sollte das passen. Das macht auch so meine encrypt function e.

Viele Grüße
Sascha
 

zerix

Hausmeister
Moderator
Nach der Umkehrwalze schaust du halt, wie der Index zum Buchstaben ist. Also du nimmst das 'D' und läufst durch Walze3 und schaut, wo das 'D' steht. Der Schlüssel zu dem Wert ist dann der gesuchte Buchstabe. (Falls du eine Hashmap oder ein dict nutzt, abhängig von Sprache. )
 

StormChaser

Mitglied
Nach dem 'D', änderst du da schon die Rotierrichtung?

edit:
Ach, du suchst den KEY zu dem BUCHSTABEN!
Das eröffnet schon wieder völlig neue Möglichkeiten :)

edit2: Dann ist das jetzt aber das "jeweils in umgekehrter Richtung" . Macht dann auch Sinn.
 
Zuletzt bearbeitet:

zerix

Hausmeister
Moderator
Nach dem 'D', änderst du da schon die Rotierrichtung?

edit:
Ach, du suchst den KEY zu dem BUCHSTABEN!
Das eröffnet schon wieder völlig neue Möglichkeiten :)

edit2: Dann ist das jetzt aber das "jeweils in umgekehrter Richtung" . Macht dann auch Sinn.
Richtig, das heißt in umgekehrter Richtung. Da wird noch nichts rotiert.
 

StormChaser

Mitglied
Eingabe: 'W'
Walze1 ['W']: 'U'
Walze2 ['U']: 'P'
Walze3 ['P']: 'H'
Umkehr['H']: 'D'
Walze3 ['G'] : 'D'
Walze2 ['R']: 'G'
Walze1 ['I']: 'R'

Damit sollte 'W' zu 'I' verschlüsselt werden.

So, da bin ich inzwischen auch angekommen mit einem Unterschied, der darauf beruht, dass ich die erste Walze nach jeder Eingabe (vorwärts) rotieren lasse, so dass die Eingabe von 'W' zu U=>P => H =>D => G => R => 'W' wird, weil nach der Erzeugung von 'U' die 1. Walze rotiert.

Dies macht ein weiteres Definitionsproblem deutlich: Was gilt als 'Eingabe' ? Nur das, was von aussen kommt, oder auch bereits intern weitergereichte Buchstaben.
Bedeutend ist die Frage für den Hinweis im Eingangspost auf die 22. Rotation der 2. Walze: Zieht man auch die internen Weitergaben mit ein, so erfolgt die Rotation um den 11. einzugebenden Buchstaben herum, da bei jedem von aussen eingegebenen Buchstaben die Walzen 1, 2 und 3 je 2x besucht werden.
 

zerix

Hausmeister
Moderator
Eingabe ist nur die tatsächliche Eingabe und nicht die interne Verarbeitung.
Aber du kannst ja mal testen, ob für den verschlüsselten Buchstaben, der richtige Klartextbuchstabe herauskommt, wenn du diesen eingibst, bei gleicher Walzenstellung. Du solltest natürlich nicht das 'W' wählen, sondern einen beliebigen anderen.

Viele Grüße
Sascha
 

StormChaser

Mitglied
Gebe ich "WETTERBERICHT" ein, erhalte ich z. B. "IECHISQOFXXUT". Gebe ich das ein, gibt es alles Mögliche, nur keinen Wetterbericht :alien:
Ich baue dann mal um, so dass die Rotationen erst erfolgen, wenn eine Eingabe abgearbeitet ist.

edit:
so, jetzt geht es zumindest in beide Richtungen, und beide Rotierrichtungen.
Wenn die erste Walze nach jeder Eingabe rotiert,
und die 2. Walze nach mehr als 13 Eingaben,
und die 3. Walze nach mehr als 13 Eingaben,
und die 4. Walze nicht rotiert,
und ich gebe WETTERBERICHT ein,
dann erhalte ich
a) IFZHWEYKTJEXE
b) IGENLPAOOYABA
Beide lassen sich bei der entsprechenden Rotierrichtung wieder zu WETTERBERICHT dechiffrieren.

Kann das jemand bestätigen ?
 
Zuletzt bearbeitet: