Die mit polyalphabetischer Verschlüsselung kodierten Texte (bei Verwendung eines Alphabets) lassen sich meist sehr einfach über die Häufigkeitsverteilung der Buchstaben in Texten entschlüsseln.
Texte in deutscher Sprache haben etwa folgende Verteilung (nach deutscher Wikipedia) als double-Feld. Umlaute sind als ae, ue, oe gezählt:
double [] haeufigkeiten = new double[256];
haeufigkeiten['a'] = 0.0651;
haeufigkeiten['b'] = 0.0189;
haeufigkeiten['c'] = 0.0306;
haeufigkeiten['d'] = 0.0508;
haeufigkeiten['e'] = 0.1740;
haeufigkeiten['f'] = 0.0166;
haeufigkeiten['g'] = 0.0301;
haeufigkeiten['h'] = 0.0476;
haeufigkeiten['i'] = 0.0755;
haeufigkeiten['j'] = 0.0027;
haeufigkeiten['k'] = 0.0121;
haeufigkeiten['l'] = 0.0344;
haeufigkeiten['n'] = 0.0253;
haeufigkeiten['m'] = 0.0978;
haeufigkeiten['o'] = 0.0251;
haeufigkeiten['p'] = 0.0079;
haeufigkeiten['q'] = 0.0002;
haeufigkeiten['r'] = 0.0700;
haeufigkeiten['s'] = 0.0727;
haeufigkeiten['t'] = 0.0615;
haeufigkeiten['u'] = 0.0435;
haeufigkeiten['v'] = 0.0067;
haeufigkeiten['w'] = 0.0189;
haeufigkeiten['x'] = 0.0003;
haeufigkeiten['y'] = 0.0004;
haeufigkeiten['z'] = 0.0113;
haeufigkeiten['ß'] = 0.0031;
Implementieren Sie ein Programm, welches mit Hilfe dieser Verteilung einen verschlüsselten Text entschlüsselt: die Zeichen im verschlüsselten Text werden gezählt und dann mit den am besten passenden Buchstaben obiger Verteilung ersetzt. Der verschlüsselte Text sollte möglichst lang sein (mehr als 1000 Zeichen).
Man kann den Algorithmus noch verbessern, indem die Buchstabenhäufigkeit von Anfangs- und Endbuchstabe mit berücksichtigt wird oder ein Wörterbuch verwendet wird.
30. Juni, 2008 um 16:47
Um die Implementierung besser testen zu können, sollte man statt obiger Häufigkeitsverteilung, die Verteilung für einen (langen) Text selbst berechnen (diese Funktionalität muss man ohnehin implementieren). Diese Verteilung sollte zum Testen für diesen Text verwendet werden.