Liebe Leute,
ich habe dieses Forum über Google gefunden und mich in der Hoffnung registriert, hier eventuell Hilfe zu finden.
Folgendes Problem: Ich habe eine Aufgabe zu lösen, für die ich mit jemandem gemeinsam auch schon den Quellcode geschrieben habe, allerdings bin ich mir - aufgrund mangelnder Java-Kenntnisse - nicht sicher, ob die Lösung stimmt. Ich würde mich darum freuen, wenn jemand von euch einmal drüber schauen und mir sagen könnte, was da verbesserungsfähig oder gar falsch ist.
Zunächst die Aufgabe:
Und hier unser "Versuch":
Alles anzeigen
Wir haben noch ein Problem mit dem Wörterbuch, denn fügen wir mehrere Wörter mittels dictionary[1] usw. hinzu, dann wird ein Fehler ausgegeben.
Entschuldigt, wenn das alles nicht stimmt, aber wir sind ziemliche Dummies auf diesem Gebiet.
ich habe dieses Forum über Google gefunden und mich in der Hoffnung registriert, hier eventuell Hilfe zu finden.
Folgendes Problem: Ich habe eine Aufgabe zu lösen, für die ich mit jemandem gemeinsam auch schon den Quellcode geschrieben habe, allerdings bin ich mir - aufgrund mangelnder Java-Kenntnisse - nicht sicher, ob die Lösung stimmt. Ich würde mich darum freuen, wenn jemand von euch einmal drüber schauen und mir sagen könnte, was da verbesserungsfähig oder gar falsch ist.
Zunächst die Aufgabe:
Im alten Rom wurden unter Cäsar geheime Nachrichten durch ein einfaches Verfahren verschlüsselt, indem jedes Zeichen der Nachricht char message[0...n] (als char-Feld der Länge n) durch zyklisches Verschieben im Standardalphabet (’a’ . . . ’z’) um einen festen Wert (den Schlüssel) in die verschlüsselten Nachricht secret[0...n] kodiert wird. So wird z. B. bei einem Schlüssel k=2 mit
Klartextzeichen a b c . . . y z
verschlüsselt c d e . . . a b
aus message = "ahoi" die verschlüsselte Nachricht secret = "cjqk". Zur Vereinfachung werden Leerzeichen weggelassen und alle Zeichen in Kleinbuchstaben konvertiert. Schreiben Sie ein „Crack“-Programm, das versucht, eine verschlüsselte Nachricht zu knacken,
indem es
• alle möglichen Schlüssel durchprobiert,
• die durch Anwendung eines Schlüssels erhaltene Zeichenkette unter Verwendung eines Wörterbuchs auf sinnvolle Wörter prüft.
Hinweis 1: Das Wörterbuch können Sie als Feld von Strings (String[] dictionary) implementieren, wobei die Wörter entweder beispielhaft direkt im Programmtext angegeben (einfach) oder aus einer Datei geladen (anspruchsvoll) werden.
Hinweis 2: Auf Grund der ASCII-Kodierung der Zeichen des Alphabets kann man mit Zeichen einfach “rechnen“. So ist z. B. ‘a‘+ 10 = ‘k‘. Nach ‘z‘ beginnt der Zyklus wieder mit ‘a‘.
Und hier unser "Versuch":
Quellcode
- public class codeknacker {
- public static void main(String[] args) {
- String[] dictionary = new String[1];
- dictionary[0] = "wintersonnenwende";
- String Dekodieren = "dpualyzvuuludlukl";
- String alpha = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
- int Laenge = Dekodieren.length();
- char[] Feld = new char[Laenge];
- char neu;
- String raus = "";
- for (int i = 0; i < Laenge; i++) {
- Feld[i] = Dekodieren.charAt(i);
- }
- for (int j = 0; j < 26; j++) {
- raus = "";
- for (int i = 0; i < Laenge; i++) {
- neu = alpha.charAt(alpha.indexOf(Feld[i]) + j);
- raus += neu;
- }
- System.out.println(raus);
- for (int k = 0; k < dictionary.length; k++) {
- if (raus.equals(dictionary[k])) {
- System.out.println("Ergebnis: " + raus);
- break;
- }
- }
- }
- }
- }
Wir haben noch ein Problem mit dem Wörterbuch, denn fügen wir mehrere Wörter mittels dictionary[1] usw. hinzu, dann wird ein Fehler ausgegeben.
Entschuldigt, wenn das alles nicht stimmt, aber wir sind ziemliche Dummies auf diesem Gebiet.
