next up previous contents
Nächste Seite: Häufigkeitsanalysen Aufwärts: Einfache Chiffrier-Verfahren Vorherige Seite: Substitutionschiffre   Inhalt

Die Vigenère-Chiffre

Die Caesar-Chiffre und die Substitutionschiffre ordnen jeweils einem Buchstaben des Alphabets einen anderen zu. Sie werden monoalphabetisch genannt. Die Vigenère-Chiffre hingegen verschlüsselt gleichzeitig mehrere Buchstaben des Alphabets. Eine solche Chiffre heißt polyalphabetisch.

Wir überlegen uns die Verschlüsselung anhand eines einfachen Beispiels: Der Satz ``Informatikistschoen'' soll mit Hilfe des Schlüsselwortes ``krypto'' verschlüsselt werden:

I N F O R M A T I K I S T S C H O E N
K R Y P T O K R Y P T O K R Y P T O K


Im Algorithmus für die Verschlüsselung wird also für jeden Buchstaben des Klartextes ein anderer Buchstabe des Schlüsselwortes für die Verschiebung herangezogen. Damit ist zu erwarten, dass die Vigenère-Chiffre umso sicherer ist, je länger das Schlüsselwort ist.

import java.io.*;

public class vigenere {
    static byte geheim[] = new byte[200];
    static byte schluessel[] = new byte[26];

    public static void main (String args[]) throws IOException{
        InputStreamReader datenstrom = new InputStreamReader(System.in);
        BufferedReader dateneingabe = new BufferedReader(datenstrom);
        String sl = args[0];
        schluessel = sl.getBytes();
        for (int i=0;i<sl.length();i++) if (schluessel[i]>=90) schluessel[i]-=32;
        String s = dateneingabe.readLine();
        verschluessle(s);
        ausgabe();
    }

    public static void verschluessle (String s) {
        geheim = s.getBytes();
        for (int i=0; i < geheim.length; i++) {
            if (geheim[i]>=90) geheim[i]-=32;
            int k = i % schluessel.length;
            geheim[i]+= (byte) (schluessel[k]-65);
            if (geheim[i] > 90) geheim[i]-=26;
        }
    }

    public static void ausgabe () {
        String s="";
        for (int i=0;i<geheim.length;i++) {
            char interim = (char) geheim[i];
            s+= interim;
        }
        System.out.println("\n" + s);
    }    
}

Beachte die Verwendung der Restklassen-Arithmetik für die Berechnung der aktuellen Position im Schlüsselwort - int k = i % schluessel.length;. Wir wenden die Verschlüsselung mit dem Schlüsselwort ``krypto'' auf einen bestimmten Klartext (ohne Leerzeichen und Sonderzeichen) an:

alfred@duron:~/java/kurs/krypto> java vigenere krypto
diesisteintestundinformatikistschoensagteininformatiklehrerdennlehrerluegennichtsagtderlehrer

NZCHBGDVGCMSCKSCWWXWMGFODZIXLHCTFDXBCREIXWXZLUHFWRRXDZOYPTKROELAXVBVPANSQVLCBQRKQPZHNVPAXVBVP


next up previous contents
Nächste Seite: Häufigkeitsanalysen Aufwärts: Einfache Chiffrier-Verfahren Vorherige Seite: Substitutionschiffre   Inhalt
Alfred Nussbaumer 2003-02-10