Die Webseiten der Fachschaft Informatik am ERG Saalfeld


monoalphabetische Substitution

Als monoalphabetische Substitution bezeichnet man ein Verschlüsselungsverfahren, bei der nur ein (festes) Alphabet zur Verschlüsselung, also zur Umwandlung des Klartextes in den Geheimtext, verwendet wird. Ein Beispiel für eine monoalphabetische Verschlüsselung ist das folgende Verfahren: Hierbei werden einzelne Buchstaben des Klartextes mithilfe des Schlüsselalphabets in einzelne Zeichen des Geheimtextes substituiert.

    Klartext: 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  
    Geheimtext: U F L P W D R A S J M C O N Q Y B V T E X H Z K G I  

Aus dem Klartext "Wikipedia ist informativ" wird nach Verschlüsselung der Geheimtext "ZSMSYWPSU STE SNDQVOUESH". Der Klartext lässt sich durch Entschlüsselung wieder aus dem Geheimtext rekonstruieren, indem man dort die Buchstaben in der zweiten Zeile durch die der ersten Zeile ersetzt. Der Geheimtext, auch als Chiffrat bezeichnet, wird zur leichteren Unterscheidung vom Klartext zumeist mit Großbuchstaben geschrieben.

Programm

use strict;
use warnings;


# der zu verschlüsselnde Text
my $string = 'wikipedia ist informativ';
print $string, "\n";

# zu Ausbildungszwecken wird der Klartext in Kleinbuchstaben
my @klartext   = qw(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);
# der verschlüsselte Text in Grossbuschtaben geschrieben
my @geheimtext = qw(U F L P W D R A S J M C O N Q Y B V T E X H Z K G I);


# Konzept: da es keine Funktion gibt, die uns direkt den ersten Buchstaben
# eines Strings liefert, drehen wir hier den String mit 'reverse' um und
# holen uns mit 'chop' den letzten Buchstaben. Alternativ könnte man auch
# mit 'substr' direkt auf den ersten Buchstaben zugreifen.

my ($char, $index, $laenge, $temp);  # Deklarieren der Variablen
$laenge = length($string);                # 1
$temp   = reverse $string;               # 2
foreach my $nr ( 1 .. $laenge ) {      # 3
  $char  = chop $temp;                    # 4
  $index = &get_index($char);            # 5
  if ($index != -1) {                         # 6
    print $geheimtext[$index];           # 7
  }
  else {
    print $char;                              # 8
  }
}

print "\n";


##### Ende des Hauptprogramms #####

# Aufruf: $nummer = &get_index('c');
# diese Funktion greift auf die Liste @klartext zurück (globale Variable)
# sie liefert den Index des Parameters in @klartext zurück, sonst -1
sub get_index {
  my $char = shift;

  # http://perlmaven.com/how-to-get-index-of-element-in-array
  my ($index) = grep { $klartext[$_] eq $char } (0 .. @klartext-1);
  unless (defined($index)) {
    $index = -1;
  }

  return $index;
}

__END__

 

Der Aufruf sah bei mir so aus:

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen.
  2. Testen Sie das Programm mit einem anderen zu verschlüsselnden Text.
  3. Kommentieren Sie das Programm (#1 bis #8).
  4. Ändern Sie das Programm so, dass der zu verschlüsselnde Text aus einer Datei eingelesen wird.
  5. Erstellen Sie ein weiteres Programm, welches einen verschlüsselten Text entschlüsselt.
  6. Ändern Sie die beiden Programme so ab, dass das Alphabet auch aus einer Datei eingelesen wird (wartungsfreundliche Lösung).
  7. Informieren Sie sich über den Spezialfall der Cäsar-Verschlüsselung.
  8. Ändern Sie Ihre Programme ab, indem Sie das entsprechende Alphabet einlesen.
  9. Vergleichen Sie ihre Ergebnisse auf der Seite von Weblink 5.
  10. Informieren Sie sich über den Spezialfall von rot13.
  11. Ändern Sie Ihre Programme ab, indem Sie das entsprechende Alphabet einlesen.
  12. Vergleichen Sie ihre Ergebnisse auf der Seite von Weblink 7.

 

Weblinks

  1. Wikipedia: Verschlüsselungsverfahren
  2. Wikipedia: Symmetrisches Kryptosystem
  3. Wikipedia: Monoalphabetische Substitution
  4. Wikipedia: Caesar-Verschlüsselung
  5. Caesar: Verschlüsselung und Entschlüsselung
  6. Wikipedia: ROT13
  7. ROT13 @ http://www.rot13.de

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   21.05.2015