Textverschlüsselungsprogramm

Websen

Mitglied
Seid gegrüßt,

ich versuche gerade ein Programm zu schreiben, welches durch zyklisches Verschieben des Standardalphabetes eine Nachricht in eine verschlüsselte Nachricht umwandelt bzw. kodiert. Das bedeutet ist der Schlüssel k=2 angegeben wir daus einem "a" ein "c" usw...
Das Programm soll mit dem Schlüssel k=7 arbeiten und ndie verschlüsselte Nachricht "dpualyzvuuludukl" decodieren.
Mein Lösungsansatz sieht bisher wie folgt aus:

Java:
import algoj.IOUtils;

public class Aufgabe_4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	char[] message=new char[26];
	char[] secret=new char[17];
	int schluessel=7,komplement=19,i=0,k=0;
	
	System.out.println("Bitte geben Sie alle 26 Buchstaben des Alphabets ein.");
	while (i<26){
		message[i]=IOUtils.readChar();
		i=i+1;
	}
	i=0;
	
	System.out.println("Bitte geben Sie den verschlüsselten Text ein.");
	while (i<17){
		secret[i]=IOUtils.readChar();
	}
	i=0;
	
	while (i<17){
		while (k<26){
			if (secret[i]==message[k]){
				if(k>=7){
					secret[i]=message[k-schluessel];
					k=26;
				}
				else
					secret[i]=message[k+komplement];
			}
			else
			k=k+1;
		}
		k=0;
		i=i+1;
	}
	i=0;
	
	while (i<17);{
		System.out.println(secret[i]);
		i=i+1;
	}
}}

Ich habe die Klasse algoj.jar importiert für die Eingabe. Der Nutzer muss anfangs zuerst das Alphabet und dann das verschlüsselte Wort eingeben, danach folgt die Dekodierung. Leider habe ich es nicht hinbekommen ein Feld zu erstellen welches das Alphabet beinhaltet. Zudem wird die Eingabe nicht beendet, ich weiss nicht wo der Fehler liegt.
Man muss sich natürlich erst einmal in das Programm eindenken, aber vielleicht kann mir jemand Verbesserungsvorschläge o.ä. geben.
Bin gespannt auf eure Antworten. Danke schonmal im vorraus.

Grüße Websen
 

XHelp

Top Contributor
In der while-Schleife Zeile 21-23 ist i ja auch unverändert...
Was dein Alphabet angeht:
Java:
for (char c='a';c<='z';c++) {
  System.out.println(c);
}
Aber eigentlich brauchst du es nicht gespeichert zu halten.
Ansonsten fehlt hier irgendwie Modulo... dann wäre der Code auch übersichtlicher.
 

Network

Top Contributor
Was ich nicht verstehe, ist: Warum muss man das ganze Alphabet erst eintippen?

Währe es nicht viel vorteilhafter, es bereits in Petto zu haben?
Zum Beispiel eine ArrayList?


Was ich vorschlagen würde, währe folgendes:
-> Ein Textdokument, wo alle Buchstaben des Alphabets aufgelistet sind. Hinter diesen Buchstaben steht ein anderer Buchstabe. (je durcheinanderer die Buchstaben in der 2. Reihe gemischt sind, desto besser)

Beim Übersetzen, wird dann immer aus dieser Liste der jeweilige Buchtabe aus der 1. oder 2. Zeile gesucht, und als sein Nachbar übersetzt.

So kann man ganze "Bibiliotheken" an relativ komplizierten Codierungsmethoden erstellen und verwenden.
 

XHelp

Top Contributor
-> Ein Textdokument, wo alle Buchstaben des Alphabets aufgelistet sind. Hinter diesen Buchstaben steht ein anderer Buchstabe. (je durcheinanderer die Buchstaben in der 2. Reihe gemischt sind, desto besser)

Das würde aber nichts mit dem hier beschriebenen Verschlüsselungsverfahren zu tun haben.

P.S. Vllt noch ein Denkanstoß: du hast mit k=7 verschlüsselt. Entschlüsseln musst du das ganze mit k=-7. Aber wie gesagt, der Ablauft ist im Moment etwas komisch. Du brauchst ledeglich eine for schleife, mehr nicht.
 

aedu00

Mitglied
Du versuchst anscheinend den Caesar zu implementieren. Such doch bei Google, da findest du bestimmt Beispiele: Caesar-Verschlüsselung ? Wikipedia

Ansonsten verstehe ich ebenfalls nicht wieso du versuchst das Alphabet einzulesen?! Lies doch einfach ein String ein (welchen du verschlüsseln möchtest). Strings sind in Java mit UTF-16 codiert. Der für dich relevante Teil von UTF-16 ist konform mit ASCII. In ASCII sind die 26 Buchstaben des ABC direkt hintereinander... du kannst also einfach einen Character nehmen, gewünschte Zahl addieren und fertig. (z.B. a = 97 => 97 + 3 => 100 = d) Natürlich musst du bei z wieder von vorne beginnen ;-)
 

Neue Themen


Oben