Wie lautet der Programmcode in Java für das Verschlüsseln/Entschlüsseln mit der Vigenère Verschlüsselung?

3 Antworten

Z.B. so:

class Vigenere{
    public static String encrypt(String message, String key){
        int key_offset = 0;
        char[] key_chars = key.toUpperCase().toCharArray();
        char[] message_chars = message.toCharArray();
        for(int message_offset = 0; message_offset < message_chars.length; ++message_offset){
            if(message_chars[message_offset] >= 'a' && message_chars[message_offset] <= 'z'){
                message_chars[message_offset] = (char)(97 + ((message_chars[message_offset] - 97) + (key_chars[key_offset++] - 65)) % 26);
            }
            else if(message_chars[message_offset] >= 'A' && message_chars[message_offset] <= 'Z'){
                message_chars[message_offset] = (char)(65 + ((message_chars[message_offset] - 65) + (key_chars[key_offset++] - 65)) % 26);
            }
            key_offset %= key_chars.length;
        }
        return new String(message_chars);
    }
    public static String decrypt(String message, String key){
        int key_offset = 0;
        char[] key_chars = key.toUpperCase().toCharArray();
        char[] message_chars = message.toCharArray();
        for(int message_offset = 0; message_offset < message_chars.length; ++message_offset){
            if(message_chars[message_offset] >= 'a' && message_chars[message_offset] <= 'z'){
                message_chars[message_offset] = (char)(97 + ((message_chars[message_offset] - 97) - (key_chars[key_offset++] - 65) + 26) % 26);
            }
            else if(message_chars[message_offset] >= 'A' && message_chars[message_offset] <= 'Z'){
                message_chars[message_offset] = (char)(65 + ((message_chars[message_offset] - 65) - (key_chars[key_offset++] - 65) + 26) % 26);
            }
            key_offset %= key_chars.length;
        }
        return new String(message_chars);
    }
}

Das klingt mir zu sehr nach Hausaufgabe...

Zerlege das ganze in Teilaufgaben:

  1. Wie funktioniert die Eingabe des Textes (Kommandozeile?) und des Schlüssels
  2. Wie würde z.B. Cäsar-Chiffre (Spezialfall/sehr einfache Form der Vigenère-Verschlüsselung) aussehen? Oder auch: wie durchläuft man alle Zeichen eines Strings... + Wie fügt man Zeichen einem neuen String hinzu
  3. Wie soll die Ausgabe erfolgen? System.out.println?

So schwer ist das nicht... Und bei konkreten Fragen - z.B. warum etwas nicht geht... kannst du dich ja nochmal melden.

So wie ihn der jeweilige Entwickler implementiert.