import java.io.*;
public class vigenere1 {
static byte geheim[] = new byte[256];
static byte geheimwort[] = new byte[256];
static int l; // Länge des Schlüsselwortes
static int n; // Länge des Textes
static File g; // Ausgabe des Chiffretextes
static DataOutputStream ausgabe;
public static void main (String args[]) {
File f = new File(args[0]);
g = new File(args[1]);
try {
BufferedReader eingabe = new BufferedReader(new FileReader(f));
ausgabe = new DataOutputStream(new FileOutputStream(g));
geheimwort = args[2].getBytes();
l = geheimwort.length;
for (int i=0; i<l; i++) {
if (geheimwort[i]>90) geheimwort[i] -= 32;
geheimwort[i] -= 65;
}
String zeile = eingabe.readLine();
while (zeile != null) {
verschluessle(zeile);
zeile = eingabe.readLine();
}
System.out.println(n+" Zeichen verschluesselt.");
}
catch (IOException e) {System.err.println(e.toString());
}
}
public static void verschluessle (String s) {
geheim = s.getBytes();
for (int i=0; i<geheim.length; i++, n++) {
if (geheim[i]>90) geheim[i] = (byte) (geheim[i]-32);
int k = n % l;
geheim[i] = (byte)(geheim[i] + geheimwort[k]);
if (geheim[i]>90) geheim[i] = (byte) (geheim[i]-26);
}
try {
for (int i=0; i<geheim.length; i++) ausgabe.write(geheim[i]);
ausgabe.write('\n');
}
catch (IOException e) {System.err.println(e.toString());
}
}
}
Wir wenden diese Klasse auf die Klartextdatei vigeneretext.txt an und schreiben die verschlüsselten Daten in die Chiffretextdatei vigeneretext.chf; dabei verwenden wir das Schlüsselwort krypto:
alfred@duron:~/java/kurs/krypto> java vigenere1 vigeneretext.txt vigeneretext.chf krypto 89 Zeichen verschluesselt.
Beachte, wie bei jedem Durchlauf der for - Schleife gleichzeitig zwei Variable inkrementiert werden: for (int i=0; i<geheim.length; i++, n++).
Die Chiffretext-Datei wird im nächsten Beispiel entschlüsselt. Da dabei das gleiche Schlüsselwort wie beim Verschlüsseln verwendet wird, muss grundsätzlich neben dem Chiffretext auch das Schlüsselwort zwischen Sender und Empfänger übertragen werden15.