Nachrichtenverschlüsselung nach Caesar:

F34RL355

Mitglied
Ich bräuchte mal wieder einen kleinen Denkanstoß und hoffe hier kann mir jemand helfen :toll:

folgende Aufgabenstellung:

Der Text "geheimenachricht" soll mithilfe eines Keys "akey" codiert werden.
Dabei entspricht jeder Buchstabe des Keys der Anzahl der Vorrückungen im Alphabet
(a=0, k=10, e=4, y=24).

Code:
g e h e i m e n a c h r i c h t

a k e y a k e y a k e y a k e y

g o l c i w i l a m l p i m l r

Das Beispiel lösen:
einmal mit Schleife und
einmal rekursiv

Mit einer Schleife is das ja ned so schwer ... aber rekursiv steh ich grad ein bissl an ...

Also rekursiv müsst doch bedeuten
Code:
f(0) ='g' = 6
f(1) = 'o' = 14
f(2) = 'l' = 11
und ich brauch eine Formel f(n+1) = f(n) + x ??? so in der Art halt, oder ?
 
Zeig mal die for- Schleife her, dann muss sich nicht jeder in die Caesar Kodierung einlesen,
ich weiß zwar, dass es mit Alphabetsverschiebungen zu tun hat aber es is doch schon länger her bei mir.
Verschlüsselung ist Caeser auf keinen Fall, wurde schon vor 2000 Entschlüsselt und mit dem Tool
CrypTool - Educational Tool for Cryptography and Cryptanalysis -> kann ich sehr empfehlen, übrigens auch als Eclipse RCP zu haben, dauert das entschlüsseln genau 15sec.
 
Zuletzt bearbeitet:
Vielleicht so, dass du eine Methode schreibst, die als Argument den zu entschlüsselnden String übernimmt und die Verschiebungs-Zahl und dann zunächst den ersten Buchstaben entschlüsselt, einen Substring vom Rest bildet und die Methode sich dann mit diesem wiederum aufruft, bis der String leer ist.

Java:
String entschluesseln(String str, int index){
   if(!str.equals("")){
      String firstChar = str.substring(0,1);
      //entschlüsselungskod für firstChar ausführen, Ergebnis sei in der Variablen ergebnis
      return ergebnis + entschluesseln(str.substring(1), index);
    }
    else return "";
}
 
Zuletzt bearbeitet von einem Moderator:
Mit 'ner Schleife hab ich's so gelöst :

Java:
	public String encrypt(String s){
		String out = "";
		for (int i = 0; i<s.length(); i++) {
			out+=shift(s.charAt(i),key.charAt(i%key.length()));
			System.out.print(i%key.length());
		}		
		return out;		
	}
	
	private char shift(char c, char k) {		
		
		return (char)(((c-'a')+(k-'a'))%26+'a');
		
	}

...entschlüsselnden String übernimmt und die Verschiebungs-Zahl und dann zunächst den ersten Buchstaben...

Die Verschiebungszahl ? Also 0, 10, 4, 24 ?
 
Damit sollte es gehen:

Java:
    public static void main(String[] args) {
        //StringBuilder verwenden, da dieser veränderlich ist
        StringBuilder geheimnachricht = new StringBuilder("geheimnachricht");
        geheimnachricht = encrypt(geheimnachricht, 0);
        System.out.println(geheimnachricht.toString());
    }

    private static StringBuilder encrypt(StringBuilder text, int pos) {
        char character = text.charAt(pos);
        text.setCharAt(pos, (char) rotateRight(character, character - 'a', 'a', 'z'));
        return (++pos) < text.length() ? encrypt(text, pos) : text;
    }

    private static int rotateRight(int value, int dif, int min, int max) {
        return (value += dif) > max ? value + min - max - 1 : value;
    }

Viel Spaß 🙂

Gruß
 

Neue Themen


Zurück
Oben