Substitutionschiffren werden im Allgemeinen nicht mehr durch ``Durchprobieren'' entziffert, sondern damit, dass die Häufigkeiten der Buchstaben im verschlüsselten Text mit den Buchstabenhäufigkeiten in der Texten der Sprache des Klartextes verglichen werden. Zusätzlich wird das Auftreten von Buchstabenkombinationen beobachtet (z.B. ``ch'', ``sch'', ``ent'', ``ge'', ``en'', ...).
Im Beispiel gehen wir davon aus, dass ein Geheimtext bei bekanntem Schlüssel entziffert werden soll. Dabei werden wir folgende Methoden von String-Typen verwenden:
Das Beispiel desubstitution2.java zeigt, wie eine mit dem Substitutionsverfahren verschlüsselte Datei in Klartext umgewandelt werden kann:
import java.io.*; public class desubstitution2 { static File fi; static File fo; static DataOutputStream zeileraus; static byte klar[] = new byte[1000]; static byte alphabet[] = new byte[26]; static String al; static String sl; public static void main (String args[]) throws Exception { fi = new File(args[0]); fo = new File(args[1]); try { FileReader fri = new FileReader(fi); BufferedReader zeilerein = new BufferedReader(fri); FileOutputStream fro = new FileOutputStream(fo); zeileraus = new DataOutputStream(fro); sl = "radioktvezflbcghjmnpqsuwxy"; al = "abcdefghijklmnopqrstuvwxyz"; alphabet = al.getBytes(); String zeile = zeilerein.readLine(); while (zeile != null) { entschluessle(zeile); zeile = zeilerein.readLine(); } } catch (FileNotFoundException e) { System.out.println("Datei nicht vorhanden"); } } public static void entschluessle(String zeile) { klar = zeile.getBytes(); for (int i=0;i<klar.length;i++) { int index = sl.indexOf(klar[i]); klar[i] = (byte) al.charAt(index); } try { for (int i=0;i<klar.length;i++) { zeileraus.write(klar[i]); } zeileraus.write('\n'); } catch (IOException e) { System.err.println(e.toString()); } } }
Beachte, dass im obigen Beispiel nur Dateien verarbeitet werden können, die den gleichen Schlüssel verwenden! Um verschiedene Chiffretexte erzeugen zu können, wäre es allerdings vorzuziehen, das Schlüsselwort als Befehlszeileneingabe zu übergeben (vgl. dazu die nächsten Beispiele).