[JAVA] ROT13 Ver- und Entschlüsseln

Hallo liebe Community,

ich stelle mir immer wieder selber Aufgaben um in Java vorwärts und nicht aus der Übung zu kommen.
Vor kurzem habe ich mir überlegt wie ich eine einfache ROT13 "Verschlüsselung" umsetzen kann.
Dabei habe ich mir überlegt, dass jeder char Wert auch einen int Wert hat. Z.B. A=65.
Code:
char x = 65;
System.out.println(x);

So wurde es relativ einfach umgesetzt..
Code:
public String crypt(String txt, int index) {

		StringBuffer temp = new StringBuffer();
		for (int a = 0; a < txt.length(); a++) {
			temp.append((char)(txt.charAt(a) + index));
		}
		return temp.toString();
	}
public String deCrypt(String txt, int index) {

		StringBuffer temp = new StringBuffer();
		for (int a = 0; a < txt.length(); a++) {
			temp.append((char)(txt.charAt(a) - index));
		}
		return temp.toString();
	}

Wollte fragen wo der Fehler liegt, aber gerade als ich alles fertig geschrieben hatte fiel es mir selber auf.. Wollte euch den Post nicht vorenthalten. Vielleicht hilft er in Zukunft jemand anderem.

Grüsse
Baze
 
Zuletzt bearbeitet:
Der Fehler liegt darin dass du den char wert erst in eine integer variable (als integer wert) speichern musst und ihn dann anschließend mit dem index addieren musst um diesen Wert dann wieder als char zu speichern, richtig?
Sry falls die frage doof isf aber bin Anfänger und finde den thread interessant.
 
Nein, das ist korrekt. Ein Character ist - einfach ausgedrück - nichts anderes als ein Integer, der mittels ASCII Tabelle in ein druckbares Zeichen übersetzt wird. Daher kannst du auch mit chars rechnen:

Code:
public static void main(String[] args) {
        System.out.println('a'+'b'); // implizite Konvertierung char -> int
        System.out.println((char)('a'+'b')); // explizite Konvertierung int -> char
}
Die Rechnung lautet folgendermaßen: a+b=97+98=195=Ã

Aber überlege dir mal, welche Menge an Zeichen - in der Kryptographie/Mathematik spricht man auch von Ursprungs-/Quell-/Definitionsmenge und Zielmenge - dir in ROT13 überhaupt zur Verfügung steht. Was würde denn z.B. passieren, wenn du eine größere Zahl als 26 addierst?
 
Da das Problem an sich ja schon gelöst wurde, würde ich gerne noch etwas anmerken :
Die "klassische Variante" (und meiner Meinung nach auch stilistisch schönere Umsetzung) fängt bei Werten über 25 (auf das reguläre Alphabet bezogen) wieder bei 0 an.
Beispiel :Ausgangsposition 13, Wert 13 -> 1, da 2*13 > 25 .

Kannst du ja auch mal implementieren ;)
 
Achso verstehe, das Problem wäre bei einer größeren zahl als 26 z.B. dass das verschlüsselte char kein Buchstabe mehr wäre sondern ein Sonderzeichen. Also dürfte man nur ASCII Werte zulassen die Buchstaben darstellen und der Index rotiert dann in diesem Bereich. :-)
 
Ich nehme mal an, dass SchwarzeBeere genau das gemeint hat.
Je nachdem, was für Zeichen man zulassen möchte, sind es natürlich mehr als 26 Buchstaben (Zahlen und Sonderzeichen).
Mein Ansatz um das Problem zu lösen wäre, bei Index des momentanen Zeichens + 13 > 26, wieder am Anfang anzufangen, sodass das neue Zeichen den Index (Index des m. Zeichens + 13) - 26 (oder wie viele Zeichen auch immer du zulässt) hat
 
Zurück
Oben