Gleiche Buchstabenfolgen finden (beim Kasiski-Test)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Gleiche Buchstabenfolgen finden (beim Kasiski-Test)

    Ich muss den Kasiski-Test in BlueJ implementieren.
    Der Kasiski-Test ist ein Verfahren zur Entschlüsselung von Vigenere-verschlüsselten Texten.
    Dabei soll die Schlüssellänge ermittelt werden.

    Beim Entschlüsseln geht man in mehreren Schritten vor:
    1. gleiche Buchstabenfolgen (der Länge drei oder länger) finden
    2. Abstand zwei gleicher Folgen berechnen/auszählen
    3. Alle Abstände (Zahlen) werden in Primfaktoren zerlegt
    4. Zum Schluss: Der ggT. wird ermittelt.

    Beispiel: Kryptogramm (Text)
    htwrt cwypp stshl dtwxp xiaic

    srmpf ehxiw tvjap stsmd tsjvv

    Folge-------Abstand---------Primfaktorzerlegung
    PSTS---------30------------------- 2*3*5------


    Mir geht es vor allem um den ersten Schritt:
    Wie kann ich in BlueJ(Java) ein Programm implementieren, dass im Text dieselben Buchstabenfolgen findet, ohne dass der Benutzer eine Buchstabenfolge eingeben muss, nach der gesucht werden soll? Gibt es irgendwelche entsprechende Befehle in Java?

    Hilfe zu den anderen drei Schritten wäre auch nett. Bin für jede Hilfe dankbar. :)
  • Naja, ich würde einfach mal mit Schritt 1 anfangen. Das erste "Problem" ist also das Herausfinden von gleichen Zeichenfolgen (bzw. Buchstabenfolgen). Dazu würde ich mir erstmal überlegen wie lang die Folge maximal werden kann. Dazu kannst du dir vielleicht eine kleine Methode zur Ermittlung des längsten Wortes schreiben. Oder du schaust mal, ob Java so etwas schon irgendwo hat.

    Dann würde ich jedes zeichen durchgehen und die entsprechenden Zeichen danach untersuchen. Bsp: "ein Wort, ein Satz" sei mal die Folge. Nun nehmen wir uns also als maximale Länge der Folge L=4. Wir gehen also vom ersten Zeichen "e" aus und untersuchen erst den Buchstaben selbst, dann das e und den danach "ei", dann den nächsten mit ("ein") und so weiter.

    Das heißt also im ersten Durchgang: -> "e" -> dann suchen wir den Text nach "e"s ab.
    Im zweiten Durchgang: -> "ei" -> Text nach "ei" s absuchen

    Du musst also mit Stringoperationen drauf los gehen. Das Problem an der Sache ist, dass du dir überlegen musst, wie du dir die Schlüssellänge merkst.
    Ein weiteres Problem ist der Zeitaufwand, den dieses Programm für große Texte benötigen wird. Als erstes solltest du anfangen mit Strings zu arbeiten. Das bedarf nämlich einer kleinen Eingewöhnung, vor allem auch in Themen wie Zeichensätze.

    Fang einfach mal an und stell dann spezielle Fragen.


    cya
  • Die Idee an sich hatte ich auch, nur weiß ich nicht wie ich das in Java umsetzen soll, da ich die entsprechenden Befehle nicht kenne.

    Ich probiere es grade mit CHAR. Allerdings ist es nicht sehr effizient, da es zu lange dauern würde einen Text einzugeben, wegen den ganzen Hochkommas etc. Es mit String zu lösen wäre klasse. Nur wie wähle ich eine Länge der Buchstaben aus beim String, um nach gleichen Buchstabenfolgen dieser Länge zu suchen?



    Bei der Ausgabe wird mir hier seltsamerweise: "142 und EIN" sind gleich ausgegeben und nicht "EIN und EIN" sind gleich.
    Warum macht er aus der ersten Char-Verbindung eine Zahl?

    Quellcode

    1. char[] Text= {'M','E','I','N','E','K','L','E','I','N','E'};
    2. if (Text[1]+Text[2]+Text[3]==Text[7]+Text[8]+Text[9])
    3. {
    4. System.out.println(Text[1]+Text[2]+Text[3]+" und "+Text[7]+Text[8]+Text[9]);
    5. System.out.println("Die Buchstabenfolgen sind GLEICH");
    6. }
    7. else
    8. {
    9. System.out.println(Text[1]+Text[2]+Text[3] +" und "+Text[7]+Text[8]+Text[9]);
    10. System.out.println("Die Buchstabenfolgen sind UNGLEICH");
    11. }
    Alles anzeigen