[QUIZ#11]DosCoder(Java)

DosCoder

Erfahrenes Mitglied
Hi,

hier meine Lösung des Problems. Der richtige Key wird ermitteln, indem man jede der 25 Kombinationen durchprobiert. Die Kombination mit den meisten "E"s wird als vermutute Löung vorgeschlagen. Das Ganze stützt sich auf auf diese Statistik: KLICK! Daraus folgt, dass das Programm bei längeren Texten besser funktioniert, bei "Franz jagt im komplett verwahlosten Taxi quer durch Bayern" quittiert das Programm aber leider seinen Dienst. Für diesen Fall habe ich den Kommandozeilenparameter "-list" vorgesehen. Er gibt alle Kobinationen samt Schlüssel aus, und erst dann das vermutete Ergebnis.

Aufgrund der Größe des Projekts habe ich das Ganze in (Netbeans-)Projektordner eingepackt. Java-Programmierer kennen sich damit vermutlich aus, könne also den folgenden Abschnitt überspringen und sich sofort ans Auspacken der Quelldateien machen.

Da ich meine, in dieser Aufgabe, programmierten Funktionen als nützlich einstufe, und ein paar davon auch schon voher bestanden, habe ich sie alle in eine Bibliothek verfrachtet. Daher sind in der *.zip-Datei im Ahang zwei Netbeans-Projektordner zu finden. Codeknacker ist das eigentliche Projekt, Texting die Bibliothek. Unter Codeknacker/dist findet sich die Datei "Codeknacker.jar", sie wird so aufgerufen: java -jar Codekancker.jar [-list]
Am Ende der Ordnerhierarchie unter Codeknacker/src finden sich die Quelldateien. Das Gleiche findet sich unter Texting/src.

Für Win-User:
Aus irgendeinem Grund kann der Win-Editor mit Netbeans erzeugte *.java-Quelldateien nicht darstellen. Hier muss also entweder ein andere Editor und ein Browser ausgewählt werden.

Ciao
DosCoder
 

Anhänge

  • codeknacker.zip
    37,4 KB · Aufrufe: 25

zeja

Erfahrenes Mitglied
Wäre schon gut, wenn du zumindest die wichtigen Codeteile hier direkt reinstellst. Ich lad so ungern was runter ums mir anzuschauen :)
 

DosCoder

Erfahrenes Mitglied
Hi,
gut, also hier die Main-Methode:
Java:
public static void main(String[] args) {
        String encrypt = ""; // zu entschlüsselnder Text
        boolean showList = false; // wenn true, wird ganze Ergebnisliste angezeigt
        System.out.print("Bitte Text zum Entschlüsseln eingeben: ");
        // Der Try-Block dient nur zu Eingabe des Textes:
        try {
            int i;
            boolean b = false;
            do {                      
                i = System.in.read(); 
                if (i < 0 || (char) i == '\n') {
                    b = true;         
                } else {
                    encrypt = encrypt + (char) i;
                }
            } while (!b);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // Abfrage, ob ganze Liste angezeigt werden soll:
        if (args.length > 0) {
                if (args[0].equals("-list")) {
                    showList = true;
            }
        }
      
        ArrayList<String> results = new ArrayList<String>(); // Liste mit allen Kombinationen
        int resultPlacement = 0; // Position des vermuteten Ergebnisses in der Ergebnisliste
        // Durchprobieren aller Kombinationen:
        for (int i = 0; i < 26; i++) {
            String currentResult = Encoder.ceaserEncoding(encrypt, i); // Enocder ist eine statische Klasse, die Methoden zum Ver- und Entschlüsseln mit dem Ceaser-Chiffre bereitstellt (noch, es sollen mehr dazu kommen :))
            if (TextAuxiliary.getMostFrequentChar(currentResult) == 'e') { //TextAuxiliary stellt unter anderem Methoden zum analysieren eines Textes bereit.
                resultPlacement = i;
            }
            if (showList) {
                System.out.println(currentResult + " KEY: " + i);
            }
            results.add(currentResult);
        }
        System.out.println("--------------------");
        System.out.println("Vermutetes Ergebnis:");
        System.out.println("--------------------");
        System.out.println(results.get(resultPlacement)+ " KEY: " + resultPlacement);

    }

Ciao
DosCoder
 

Neue Beiträge