Hi miteinander!
Ich versuche mich zur Zeit an einem Programm das Caesar Chiffren knackt.
Das ganze funktioniert auch schon aber nicht unbedingt höchst zuverlässig.
Mein Vorgehen ist folgendes:
1) Alle Möglichkeiten ausprobieren und bei jeder Möglichkeit e, n, i, s, r in einem 'Statistic' Objekt auszählen.
2) In der Hauptfunktion werden dann die Statistic Objekte immer mit einer compare-Funktion verglichen und jeweils der Zähler für das beste Resultat gespeichert.
3) Am Ende der Schleife steht die Verschiebung mit dem besten Ergebnis in der Variable.
Meine Frage betrifft die Buchstabenanalyse. Ich gehe momentan wie folgt vor:
Das ist die Hauptfunktion:
Die compare Funktion des Statistic-Objects sieht wie folgt aus:
Für mehr E's gibts mehr "Punkte" als für mehr R's... irgendwie primitiv.
In der Hauptfunktion wird ein Resultat das einen um 3 (2, 1 möglich) besseren Wert hat als Ergebnis übernommen... Diese 3 bzw. 2 entstand aber eher durch ausprobieren...
Ich habe nirgendwo ein anständiges Beispiel für eine Buchstabenanalyse gefunden, jemand eine Idee wie man da optimal vorgeht?
Gruß, Kruemel
Ich versuche mich zur Zeit an einem Programm das Caesar Chiffren knackt.
Das ganze funktioniert auch schon aber nicht unbedingt höchst zuverlässig.
Mein Vorgehen ist folgendes:
1) Alle Möglichkeiten ausprobieren und bei jeder Möglichkeit e, n, i, s, r in einem 'Statistic' Objekt auszählen.
2) In der Hauptfunktion werden dann die Statistic Objekte immer mit einer compare-Funktion verglichen und jeweils der Zähler für das beste Resultat gespeichert.
3) Am Ende der Schleife steht die Verschiebung mit dem besten Ergebnis in der Variable.
Meine Frage betrifft die Buchstabenanalyse. Ich gehe momentan wie folgt vor:
Das ist die Hauptfunktion:
Java:
public String crack (){
Statistic best=getStatisticObject(); //<-- es sollen Statisticobjekte für Deutsch und
int besti=0; //Englisch unterstützt werden
for(int i=0; i<26; i++){
String text = getKTA(i); // Hier wird entschlüsselt
Statistic stat = analyze(text); // analyze zählt die Buchstaben aus
if(best.compare(stat)>3){ //<-- Hier liegt der Hase begraben
besti=i;
best=stat;
}
}
return getKTA(besti);
}
Die compare Funktion des Statistic-Objects sieht wie folgt aus:
Java:
public float compare(Statistic s){
float i=0;
if(s.getPercent('E')>this.getPercent('E'))
i=i+2;
if(s.getPercent('N')>this.getPercent('N'))
i=i+1;
if(s.getPercent('I')>this.getPercent('I'))
i=i+(float)0.5;
if(s.getPercent('S')>this.getPercent('S'))
i=i+(float)0.3;
if(s.getPercent('R')>this.getPercent('R'))
i=i+(float)0.3;
return i;
}
Für mehr E's gibts mehr "Punkte" als für mehr R's... irgendwie primitiv.
In der Hauptfunktion wird ein Resultat das einen um 3 (2, 1 möglich) besseren Wert hat als Ergebnis übernommen... Diese 3 bzw. 2 entstand aber eher durch ausprobieren...
Ich habe nirgendwo ein anständiges Beispiel für eine Buchstabenanalyse gefunden, jemand eine Idee wie man da optimal vorgeht?
Gruß, Kruemel