verschlüsselung

Status
Nicht offen für weitere Antworten.

agosinga

Mitglied
sollte mit java eine verschlüsselungsmethode erstellen, wo ein beliebiges wort durch den benutzer eingeben wird und dann das wort verschlüsselt wird.

zb. aus "HALLO" wird BLVVU

und es soll auch umgekehrt funktionieren lt folgender tabelle

Klartextbuchstabe ABCDEFGHIJKLMNOPQRSTUVWXYZ
Chiffrebuchstabe LEDCRQFBAZYVHXUPONWKGMJIST

gibt der benutzer +hallo ein (mit plus) wird in chiffre umgewandelt, gibt der ben. -blvvu (mit minus) wird
in klartext umgewandelt. (viell. geht das mit char.at)

hat jemand eine idee wie man an so ein projekt herangehen könnte`?
 
Code:
char[] alph1 = {'A', 'a', ...}
char[] alph2 = {'L', 'l', ...}
String input = ...;
String output = "";
if(input.startsWith("+"))
encode(input);
else if(input.startsWith("-"))
decode(input);
else
//ungültig

void encode(String in) {
   for(int i = 0; i < in.length(); i++) {
     for(int j = 0; j < alph1.length; j++) {
       if(in.charAt(i) == alph1[j])
         output += alph2[j];
     }
   } 
}
Das gleiche natürlich für decode().
 
der benutzer gibt ein:

java "Dateiname" LEDCRQFBAZYVHXUPONWKGMJIST +HALLO

und java kodiert hallo um.

wie kann ich an das programm herangehen?
 
Mal das Beispiel kommentiert

Code:
/*Hier speicherst Du in 2 char Arrays Deine Verschlüsselung. alph1 enthält das Ursprungsformat 
*(quasi das Alphabet, evtl. noch mit Zahlen), alph2 enthält die Verschlüsselung. D.h. in diesem Beispiel 
*ist die Verschlüsselung fest definiert. Willst Du die Verschlüsselung beim Aufruf Deines Programms 
*übergeben, musst  Du alpha2 mit dem übergebenen Wert füllen. Bei der Übergabe der Verschlüsselung
*solltest Du prüfen, dass es für jede Position in alpha1 eine Entsprechung in alpha2 gibt.
*/
char[] alph1 = {'A', 'a', ...} 
char[] alph2 = {'L', 'l', ...} 
String input = ...; 
String output = ""; 

/*In diesem Beispiel wird die Verschlüsselung nicht als Parameter übergeben. Stattdessen erfolgt der
*Aufruf mit java +Hello bzw. java -Hello. Über + und - wird festgelegt, ob codiert oder decodiert werden
*soll. Deswegen die Abfrage startsWith. Dementsprechend wird also encode oder decode aufgerufen.
*/
if(input.startsWith("+")) 
encode(input); 
else if(input.startsWith("-")) 
decode(input); 
else 
//ungültig 

/*Beim Codieren oder Decodieren erfolgt nichts anderes als ein zeichenweises Ersetzen. Dies wird
*durch zwei geschachtelte for-Schleifen realisiert. D.h. for(int i = 0...  durchläuft den übergebenen 
*String und sucht mit for(int j = 0... an welcher Stelle das aktuelle Zeichen in alph1 steht. Wenn
*if(in.charAt(i) == alph1[j]) ist dies der Fall und die Position für das Ersatz-/Verschlüsselungszeichen
*aus alph2 steht fest. Mit diesem Zeichen aus alph2 erstellst Du dann den verschlüsselten String, also
*output +=alph2[i]. 
void encode(String in) { 
   for(int i = 0; i < in.length(); i++) { 
     for(int j = 0; j < alph1.length; j++) { 
       if(in.charAt(i) == alph1[j]) 
         output += alph2[j]; 
     } 
   } 
}

/*Beispiel alph1 und alph2 (ohne Kleinbuchstaben)
*
*A B C D E F G H I J K L ...  (alph1)
*X Y D R S Z T G L I C P ... (alph2/Verschlüsselung) 
*
*zu verschlüsseln: AFFE
*
*Über die for-Schleifen wird die Position in der Verschlüsselung ermittelt:
*
*A -> 0 -> X
*F -> 5 -> Z
*F -> 5 -> Z
*E -> 4 ->S
*/

//Statt String würde ich für output StringBuilder verwenden.
 
Danke fürs Kommentieren!
Mit dem StringBuilder hast du natürlich Recht; ich habe keinen verwendet, da das Beispiel nur eine Herangehensweise für das eigentliche Codieren darstellen sollte (deshalb wird z. B. input auch nur mit "..." belegt).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben