[JoGu]

Kryptologie

Monoalphabetische Substitution in Perl

a7Hzq .#5r<
kÜ\as TâÆK$
ûj(Ö2 ñw%h:
Úk{4R f~`z8
¤˜Æ+Ô „&¢Dø

Für die Programmierung der Verfahren der klassischen Kryptographie ist Perl als Programmiersprache besonders geeignet. Installationsfertige Perl-Interpreter für alle wichtigen Systeme gibt es hier. Wer nur das ausführbare Programm ohne Bibliotheken haben will (das reicht für diese Vorlesung) und unter MS-Windows arbeitet, kann sich auch hier bedienen - benötigt werden die drei Dateien perl.exe, perl.dll, cw3230mt.dll irgendwo im Suchpfad.

Einige Erläuterungen zu Perl (»Crash-Kurs«), die zum Verständnis der folgenden Programme beitragen sollen, gibt es hier.


Übersetzungstabellen im Perl

Perl gestattet eine sehr komfortable Behandlung von Zeichenketten. Insbesondere ist die monoalphabetische Chiffrierung als Operator tr eingebaut, der Zeichenketten nach einer gegebenen Übersetzungstabelle umwandelt (für ein Alphabet, das aus »druckbaren« ASCII-Zeichen besteht).

Beispiel: Die monoalphabetische Substitution

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Q W E R T Z U I O P A S D F G H J K L Y X C V B N M
beschreibt man mit der Perl-Anweisung
tr/ABCDEFGHIJKLMNOPQRSTUVWXYZ/QWERTZUIOPASDFGHJKLYXCVBNM/;
oder sogar noch kürzer:
tr/A-Z/QWERTZUIOPASDFGHJKLYXCVBNM/;

Frage: Warum sollte man diese Permutation nicht als Schlüssel verwenden?


Das fertige Programm - Einfachversion

Das ganze fertige Programm einschließlich Standard-Ein- und -Ausgabe mit fest eingebautem Schlüssel sieht dann so aus:

while (<>) {                          # Read input line,
  tr/A-Z/QWERTZUIOPASDFGHJKLYXCVBNM/; # translate using key,
  print;                              # and print.
  }
Um etwas mehr Freiheit zu gewinnen, stecken wir den Schlüssel noch in eine Variable; damit der tr-Operator richtig funktioniert, muss die Anweisung mit der eval-Funktion behandelt werden, die zur Laufzeit die richtige Überstzungstabelle erzeugt:
$permut = "QWERTZUIOPASDFGHJKLYXCVBNM"; # Hard coded key
while (<>) {                          # Read input line,
  eval "tr /A-Z/$permut/";            # translate using key,
  print;                              # and print.
  }
Und gleich noch das zugehörige Entschlüsselungsprogramm:
$permut = "QWERTZUIOPASDFGHJKLYXCVBNM"; # Hard coded key
while (<>) {                          # Read input line,
  eval "tr/$permut/A-Z/";             # translate using key,
  print;                              # and print.
  }

Ein bißchen mehr Komfort

Um etwas mehr Freiheit bei der Eingabe und etwas mehr Struktur bei der Ausgabe zu haben, programmieren wir noch ein paar Hilfsroutinen:

Das ganze wird in einen Modul auxcrypt.pl gesteckt, der als ganzes aufs Herunterladen wartet, ebenso wie monoalph.pl, das monoalphabetische Verschlüsselungsprogramm und monodecr.pl, das zugehörige Entschlüsselungsprogramm.

Aufruf aus der Kommandozeile

perl monoalph.pl schluessel < klar.txt > geheim.txt

wobei schluessel durch ein Schlüsselwort, klar.txt durch den Dateinamen des Klartexts und geheim.txt durch den Dateinamen des Geheimtexts zu ersetzen ist.

Es gibt - sowohl unter Unix also auch unter MS-DOS - auch die Möglichkeit, Perl-Programme direkt ausführbar zu machen.

Aufruf auf dem Server per WWW-Formular


Autor: Klaus Pommerening, 29. September 1999; letzte Änderung: 23. April 2002

E-Mail an Pommerening@imsd.uni-mainz.de.