Caesarverschlüsselung

zaxxism

Neues Mitglied
Hallo zusammen, ich habe folgendes Problem zu folgender Aufgabe:

Schreiben Sie ein Java-Programm, das einen Text mit Hilfe der Caesar-Verschlüsselung chiffriert. Bei dieser einfachen (und unsicheren) Verschlüsselung wird jeder Buchstabe des Klartexts auf einen Geheimtextbuchstaben abgebildet. Diese Abbildung ergibt sich, indem man die Zeichen eines geordneten Alphabets um eine bestimmte Anzahl zyklisch nach rechts verschiebt (rotiert). Die Anzahl der verschobenen Zeichen bildet den Schlüssel, der für die gesamte Verschlüsselung unverändert bleibt.
Eine mögliche Zuordnung der Klartextbuchstaben zu den Geheimtextbuchstaben ist beispielsweise:
Klar: 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
Geheim: 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

Schlüssel ist hier 23..


Mein Problem: wenn ich mit 23 verschlüssel, bekomm ich "xyz{bcdefghijklmnopqrstuvz" ausgegeben anstatt "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"

Any ideas?


Java:
public class Caesar {
	
	private final int schluessel;
	
	//Verschlüsselungscode
	public Caesar(int schluessel){
		this.schluessel = (schluessel%27 +27 + (schluessel/27)) %27;
	
	}
	//Verschlüsseln
	public char decode(char chr){
		int c = chr;
		if (c > 96 && c < 122){
			c+=schluessel;
			if (c>123){
			c-=26;
		}
			}
	return (char) c;
		
}	//Entschlüsseln
	public char encode(char chr){
		int c = chr;
		if (c < 96 && c < 122){
			c-=schluessel;
			if (c>123){
			c+=26;			
		}			
}
		return (char) c;
	}
 
S

SlaterB

Gast
ist das wirklich nicht zu verstehen?
23 ist ein Schlüssel, 23 ist keine konkrete Implementierung wie 'addiere zum char 23 drauf und du bist fertig'

du musst dein Programm genau so implementieren, dass bei 23 aus a d wird,
extrem einfach zu erkennen ist dabei dass offensichtlich um 26-23 = 3 Buchstaben verschoben wird

solange du Tatsachen ignorierst und beliebige Programme baust werden die natürlich nicht unbedingt übereinstimmen

------
> this.schluessel = (schluessel%27 +27 + (schluessel/27)) %27;
ist eine verdächtig komische Codezeile, zum Glück macht die exakt gar nichts für Schlüssel zwischen 0 und 26


edit:
decode/ encode haben falsche Kommentare und eine der Methoden behandelt noch den Überlauf falsch,
wie du bei deiner Ausgabe mit { usw. leicht erkennen kannst
edit:
ok, noch mancher Fehler mehr drin

hier ein Testprogramm:

Java:
public class Test {
    public static void main(String[] args)  {
        Caesar ca = new Caesar(23);
        for (char c = 'a'; c <= 'z'; c++)   {
            System.out.println(c + ", " + (int)c + " - " + ca.encode(c) + ", " + ca.decode(c));
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

MarderFahrer

Gesperrter Benutzer
indem man die Zeichen eines geordneten Alphabets um eine bestimmte Anzahl zyklisch nach rechts verschiebt

Schlüssel ist hier 23

Das sollte zeigen, warum passiert was passiert. Im grunde hast du damit selbst schon den Grund angegeben. Die A->D Verschiebung bekommt du hin, in dem du nach rechts verschiebst. Da reichen offensichtlich "3". Verschiebst du aber 23 Mal nach rechts endest du bei A->X.

Edit: Um solche "Probleme" zu vermeiden wird wohl deshalb gerne ROT13 verwendet weil es bei einer Verschiebung um 13 Stellen egal ist, ob man das links oder recht herum macht. Daher stammt auch der Witz wenn einem ROT13 zu "unsicher" wäre, sollte man doch lieber ROT26 nehmen. Das wäre doppelt so sicher :lol:
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Caesarverschlüsselung Rückwärts Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben