Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigene Enigma-Walze nachprogrammieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eigene Enigma-Walze nachprogrammieren

    Hallo Zusammen,

    ich habe eine kleine Programmiernuss zu knacken (Anfänger...). Anfänger Aufgaben "langweilen" mich schnell und ich verliere die Lust. Also bitte seht es mir nach, wenn die Aufgabe vllt für einen Anfänger nicht geeignet ist, ich sie mir jedoch trotzdem stelle.

    Ich möchte gerne die Enigma nachprogrammieren. Jetzt nicht gleich Schnappatmung bekommen. Ich möchte nur die Walzen (in meiner Version) nachprogrammieren.
    Wer "Enigma" nicht kennt, kann sich gerne hier informieren: https://de.wikipedia.org/wiki/Enigma_(Maschine)

    Was ist gegeben:

    Gegeben ist das Alphabet (A bis Z) sowie Zahlen (0 bis 9). Nichts anderes! Daraus wird dann der Normaltext zur Geheimsprache.
    Wir gehen also davon aus, dass der Normaltext (Beispielsweise: "Passwort") nur aus Buchstaben und Zahlen besteht. Keine ASCII Zeichen, keine unterscheidung in Groß und Kleinbuchstaben.

    Was ist die Aufgabe:

    Der Normaltext "Passwort" soll nun über die Walze verschlüsselt werden. Hierbei soll sehr wohl in Klein- und Großbuchstaben sowie vorgebene ASCII Zeichen umgewandelt werden
    Beispielsweise: "Passwort" wird zu "%Abb8=Rt"

    $Zahlen = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    $Zeichen = ['!','"','§','$','%','&','/','(',')','=','?','[',']','.',',','-','+','@','#','*'];
    $Buchstaben = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];

    Überlegungen:

    Erstmal habe ich mir überlegt das ich ein zweidimensionales Array ("Rotor") erstelle. Das soll nur meine Übersetzungstabelle werden. So weiß ich welcher Buchstabe und welche Zahl wie übersetzt wurden.
    Ich Speicher also an Position 0 in meiner ersten Dimension das A, in Position 1 das B, usw.
    In meiner zweiten Dimension soll nun Random aus den vorgegebenen Zeichen gewählt und in die zweite Dimension gespeichert werden. Dabei ist darauf zu achten, dass das gewählte Zeichen nicht bereits verwendet wurde.

    Also vereinfacht ausgedrückt:

    Das Array "Rotor"
    [0][A] => HIER DAS VERSCHLÜSSELTE ZEICHEN
    [1][B] => HIER DAS VERSCHLÜSSELTE ZEICHEN
    [2][C] => HIER DAS VERSCHLÜSSELTE ZEICHEN
    [3][D] => HIER DAS VERSCHLÜSSELTE ZEICHEN
    [4][E] => HIER DAS VERSCHLÜSSELTE ZEICHEN
    [5][F] => HIER DAS VERSCHLÜSSELTE ZEICHEN
    usw.

    Ist meine Überlegung bis hierhin richtig?
    Würdet ihr anders an die Sache gehen?












  • #2
    Willkommen im Forum.

    Bist du dir sicher, dass du die Enigma nachbauen willst? Wenn ich das richtig sehe, unterstützte die nie mehr als 26 Großbuchstaben.

    Wir gehen also davon aus, dass der Normaltext (Beispielsweise: "Passwort") nur aus Buchstaben und Zahlen besteht. Keine ASCII Zeichen, keine unterscheidung in Groß und Kleinbuchstaben.
    „Buchstaben und Zahlen“ sind „ASCII-Zeichen“. https://de.wikipedia.org/wiki/Americ...on_Interchange

    In meiner zweiten Dimension soll nun Random aus den vorgegebenen Zeichen gewählt und in die zweite Dimension gespeichert werden. Dabei ist darauf zu achten, dass das gewählte Zeichen nicht bereits verwendet wurde.
    Willst du es auch wieder entschlüsseln?

    Ansonsten ist das aber vom Ansatz her nicht falsch, denke ich. Du kannst in PHP assoziative Arrays bauen nach dem Schema:

    PHP-Code:
    $rotor = array(
        
    'A' => 'x',
        
    'B' => 'y',
        
    'C' => 'z',
        
    // ...
    ); 

    Kommentar


    • #3
      Du kannst dir ja mal den Javascript-Code(Quellcode im Browser) von dieser Enigma-Simulation anschauen, damit du siehst wie es in Javascript gelöst wurde. Das umsetzen in PHP ist dann schon eine gute Übung.

      Kommentar

      Lädt...
      X