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.