Caesar-chiffre

Kekzii

Mitglied
Hallo,

Ich habe eine Verschlüsselung via Caesar-Chiffre geschrieben.

Also die Theorie ist ganz einfach :

Man hat ein Wort/Satz/Text und einen Schlüssel. Der Schlüssel besteht aus EINEM Buchstaben.
Der Buchstabe erhält eine Wertigkeit je nachdem welche Stelle der Buchstabe im Alphabet hat.
Also so hat zum Beispiel C die Wertigkeit 3 ,da er an der dritten Stelle im Alphabet steht.

jetzt wird das Wort (z.B.Hallo) "verschlüsselt" also wird jeder einzelne Buchstabe um 3 Stellen verschoben.

so wird aus dem Wort "Hallo " mit dem Schlüssel "c" das wort "kdoor".

soweit läuft das. Wenn ich jedoch ein grosses "C" statt einem kleinen nehme kommt bei dem wort "Hallo"
das Wort "+DOOR" raus
wie kann ich das verhindern?

Hier mal mein CODE

Java:
public class Bla {
	// private char hallo[];

	private char[] arrtext = null;
	private char key;

	// Konstruktoren
	public Bla(char key) {
		arrtext = createArray();
		this.key = key;

	}

	public Bla() {
		arrtext = createArray();
		this.key = 3;

	}

	// erstellen der ZeichenTabelle
	public char[] createArray() {
		// 33 Zeichen , 26Großbuchstaben , 6Zeichen ,26Kleinbuchstaben ,
		// 4Zeichen
		char[] ch = new char[33 + 26 + 6 + 26 + 4];

		int pos = 0;

		// Zuordnung der Zeichen
		for (int j = 32; j < 127; j++) {

			ch[pos++] = (char) j;
		}
		return ch;
	}

	public String codieren(String text) {
		// Start einer Zeichenkette
		StringBuffer codiert = new StringBuffer();

		for (int i = 0; i < text.length(); i++) {
			// aktueller char
			char akt = text.charAt(i);
			for (int j = 0; j < this.arrtext.length; j++) {

				if (akt == this.arrtext[j]) {

					// Verschlüsselter Buchstabe
					int bst = j + key;

					int test = bst - this.arrtext.length;
					if (test < 0) {
						bst -= this.arrtext.length;
					}

					if (bst >= this.arrtext.length) {

						bst -= this.arrtext.length;

					}

					else if (bst < 0) {

						bst += this.arrtext.length;
					}
					// falls maximale Zeichen erreicht wurden => Maximale
					// Zeichen abziehen
					if (bst > 94) {
						bst -= 94;
					}
					bst -= 1;
					akt = this.arrtext[bst];
					break;

				}

			}
			if (akt > 91) {
				akt -= 36;
			}
			// Stück für Stück Zeichenkette zusammenfügen
			codiert.append(akt);

		}
		return codiert.toString();
	}

	public String decodieren(String text) {
		// Start einer Zeichenkette
		StringBuffer codiert = new StringBuffer();

		for (int i = 0; i < text.length(); i++) {
			// aktueller char
			char akt = text.charAt(i);
			for (int j = 0; j < this.arrtext.length; j++) {

				if (akt == this.arrtext[j]) {

					// Verschlüsselter Buchstabe
					int bst = j - key;

					if (bst >= this.arrtext.length) {

						bst -= this.arrtext.length;

					}

					else if (bst < 0) {

						bst += this.arrtext.length;
					}
					// falls maximale Zeichen erreicht wurden => Maximale
					// Zeichen abziehen
					if (bst < 0) {
						bst += 94;
					}
					bst += 1;
					akt = this.arrtext[bst];
					break;

				}

			}
			// Stück für Stück Zeichenkette zusammenfügen
			codiert.append(akt);

		}
		return codiert.toString();
	}

}

Schonmal Danke im vorraus für eure Mühe
 
S

SlaterB

Gast
> so wird aus dem Wort "Hallo " mit dem Schlüssel "c" das wort "kdoor".

also bei mir nicht, ne main-Methode mit
Java:
        Bla b = new Bla('c');
        System.out.println(b.codieren("Hallo"));
führt zu
K@KKN
..

> Also so hat zum Beispiel C die Wertigkeit 3 ,da er an der dritten Stelle im Alphabet steht.

davon steht nichts im Code, du verwendst key wie er ist, 'c' ist 99

--------

allgemein hängt alles von den implementierten Regeln ab, wie wirkt sich key aus, wie unterscheidest du Groß/ Kleinbuchstaben usw.,
nur deinen (oder auch nicht deinen) Code sprechen zu lassen ist etwas dürftig,

ein Vorschlag: nur Kleinbuchstaben ver/ entschlüsseln, vorher merken was klein/ groß war, am Ende zurücksetzen:
Hallo = hallo -> kdoor = Kdoor,
oder soll groß/ klein beliebig durchmischt werden?
 

Kekzii

Mitglied
o0 seltsam

Ich hab auch eine GUI da gibt er mir Kdoor aus aber wenn ich es über die main mache dann nicht

versteh ich nicht :(


Gross und Kleinschreibung sollte schon beibehalten werden ansonsten hätte ich direkt alles in grossbuchstaben bzw. Kleinbuchstaben gemacht
 

Kekzii

Mitglied
So

jetzt habe ich die zeilen

[java=77] if (akt > 91) {
akt -= 36;
} [/code]

mal entfernt da ich gemerkt habe dass die Variable "akt" nach der For-Schleife niemals größer 91 ist es und es ziemlich unlogisch wäre davon 36 abzuziehen :D keine ahnung was mich da geritten hat ???:L
danach kommt auch das richtige Ergebnis zustande

Jetzt bleibt nur noch das Problem, dass bei einem grossen "C" als schlüssel "+DOOR" ausgegeben wird anstatt "kDOOR"

vllt kann mir da ja jemand helfen :)
 
S

SlaterB

Gast
du hast eben so ein komisches Alphabet, so dass 99 Positionen nach dem H das + steht statt das k,
wenn du das nicht willst, dann ändere wie gesagt die Regeln,

ich bin nach wie vor dafür z.B. die 26 Kleinbuchstaben bzw. evtl. 52 Klein- + Großbuchstaben nur innerhalb sich selbst zu drehen,
das 94er-Alphabet ist zu kompliziert
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
T Fehler in Caesar-Chiffre Java Basics - Anfänger-Themen 7
M Caesar Chiffre Java Basics - Anfänger-Themen 3
D Caesar Chiffre Java Basics - Anfänger-Themen 2
G Caesar-Chiffre Java Basics - Anfänger-Themen 7
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
Y Caesar Verschlüsselung Fehler Java Basics - Anfänger-Themen 4
N Caesar Entschlüsselungsprogramm Java Basics - Anfänger-Themen 10
N Caesar Verschlüsselung Java Basics - Anfänger-Themen 2
J Erste Schritte Caesar - Code Verbesserung Java Basics - Anfänger-Themen 2
K Caesar Verschlüsselng Java Basics - Anfänger-Themen 18
S Caesar Verschlüsselung Start Hilfe Java Basics - Anfänger-Themen 4
H Caesar-Verschlüsselung - Was stimmt nicht? Java Basics - Anfänger-Themen 6
J Caesar Ciphers funktioniert nicht Java Basics - Anfänger-Themen 3
S Caesar-Verschlüsselung Problem/Frage Java Basics - Anfänger-Themen 4
B Textentschlüsselung nach Caesar Java Basics - Anfänger-Themen 3
M Caesar Encrypt+Decrypt Java Basics - Anfänger-Themen 3
F Nachrichtenverschlüsselung nach Caesar: Java Basics - Anfänger-Themen 4
C weniger code für: caesar + reverse? Java Basics - Anfänger-Themen 8
P Caesar Ver- und Entschlüsselung Java Basics - Anfänger-Themen 1
L Caesar-Verschlüsselung programmieren Java Basics - Anfänger-Themen 12
M Entschlüsselungsproblem (Caesar) Java Basics - Anfänger-Themen 3
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben