M
Moonflyer
Gast
Hey Leute,
im Studium programmieren wir gerade eine Caesar Verschlüsselung.
Hier nochmal kurz die Aufgabe:
Das Verschlüsseln klappt prima, auch über die "Grenzen" hinaus. (Z wird zu C, Y zu B...).
Ich betrachte dabei quasi erst einmal die Zeichen, die simpel zu verschieben sind und dann die Zeichen am Ende des Alphabets, die gesondert betrachtet werden müssen.
Die Entschlüsselung müsste ja eigentlich genauso nur andersrum funktionieren.
Jedoch hab ich ein Problem mit dem "über die Grenze verschieben".
Ich hab die Stelle markiert, die nicht funktioniert. Irgendwie versagt mein Verstand dabei. Kann sich das bitte einer anschauen ?
Danke
im Studium programmieren wir gerade eine Caesar Verschlüsselung.
Hier nochmal kurz die Aufgabe:
Das Verfahren:
Ein Zeichen des Klartexts wird durch Verschieben um einen Wert a im Alphabet verschlüsselt. Das
Verschieben der Buchstaben erfolgt dabei zyklisch.
Beispiel:
Für a=3 folgt die Verschlüsselung dieser Tabelle mit KTA (Klartextalphabet) und GTA
(Geheimtextalphabet):
KTA: 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
GTA: 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
Aus dem Klartext ZIEL wird das Wort CLHO.
Das Verschlüsseln klappt prima, auch über die "Grenzen" hinaus. (Z wird zu C, Y zu B...).
Ich betrachte dabei quasi erst einmal die Zeichen, die simpel zu verschieben sind und dann die Zeichen am Ende des Alphabets, die gesondert betrachtet werden müssen.
Code:
public String verschluessele(String s){
s = s.toUpperCase(); // UPPERCASE
char[] k = s.toCharArray(); // Umwandeln in char-Array
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i); // Jedes einzelnes char-Element wird angewählt
if(((int)(c) >= 65) && ((int)(c) <= (90-a))){ // "Normale" Erhöhung des ASCII-Wertes um a
c = (char)((int)(c) + a);
k[i] = c;
}
else if (((int)(c) >(90-a)) && ((int)(c) <=90)){ // Sonderregel für das Überschreiten der Grenze
c = (char)(a-(90-(int)(c))+64);
k[i] = c;
}
}
s = new String(k);
return s;
}
Die Entschlüsselung müsste ja eigentlich genauso nur andersrum funktionieren.
Jedoch hab ich ein Problem mit dem "über die Grenze verschieben".
Code:
public String entschluessele(String s){
s = s.toUpperCase(); // UPPERCASE
char[] k = s.toCharArray(); // Umwandeln in char-Array
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i); // Jedes einzelnes char-Element wird angewählt
if(((int)(c) >= (65+a)) && ((int)(c) <= (90))){ // "Normale" Erniedrigung des ASCII-Wertes um a
c = (char)((int)(c) - a);
k[i] = c;
}
else if (((int)(c) >= 65) && ((int)(c) <(65+a))){ // Sonderregel für das Überschreiten der Grenze
>> c = (char)(a-(65-(int)(c))+90); << HIER KOMM ICH NICHT ZURECHT
k[i] = c;
}
}
s = new String(k);
return s;
}
Ich hab die Stelle markiert, die nicht funktioniert. Irgendwie versagt mein Verstand dabei. Kann sich das bitte einer anschauen ?
Danke