Exkurs - Implementierung von Verschiebe-Chiffriersystemen

Zielsetzung

Ziel ist es, ein Verschiebe-Chiffriersystem mit einer beliebigen Zuordnungstabelle zu entwickeln. Die Verschiebungstabelle wird über eine Verschiebezahl repräsentiert. Im vorliegenden Beispiel wäre diese Verschiebezahl die Zahl 6.

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

Augabe 1

Die Bestimmung des zugeordneten Buchstabens lässt sich in Python gut mit den Funktionen ord und chr realisieren.

>>> ord('K')
75
>>> chr(81)
'Q'

Probier diese Funktionen selbst einmal aus. Was leisten sie? Schau auch unter dem Stichwort ASCII-Codierung nach.

Augabe 2

Der folgende Quelltext zeigt die Implementierung einer Funktion buchstabeCodieren.

def buchstabeCodieren(c, v):
    m = ord(c)
    n = m + v
    if n > 90:
        n = n - 26
    d = chr(n)
    return d

Teste die Funktion mit verschiedenen Testwerten. Analysiere den Quelltext und mach dir die Bedeutung der einzelnen Anweisungen klar. Füge geeignete Kommentare zur Erklärung des Quelltextes bei.

Augabe 3

Entwickle analog eine Funktion buchstabeDecodieren, mit der man zu einem übergebenen Buchstaben c und einer übergebenen Verschiebezahl v den decodierten Buchstaben bestimmen kann.

def buchstabeDecodieren(c, v):
    ...
    return ...

Das folgende Python-Protokoll zeigt einen möglichen Testfall.

>>> buchstabeDecodieren('E', 3)
'B'

Augabe 4

Der folgende Quelltext zeigt, wie man eine Zeichenkette codiert.

def textCodieren(text, v):
    geheimtext = ''
    for c in text:
        geheimtext = geheimtext + buchstabeCodieren(c, v)
    return geheimtext

Entwickle analog eine Funktion textDecodieren und teste beide Funktionen.

Augabe 5

Längere Texte will man zuerst in einer Datei abspeichern und dann erst mit dem Chiffriersystem verarbeiten. Die folgenden Funktionen lesen einen Text aus einer Datei ein und bereiten ihn so vor, dass er nur noch aus Großbuchstaben besteht.

def textLaden(dateiname):
    f = open(dateiname, 'r')
    text = f.read()
    return text

def textVorbereiten(text):
    grossText = text.upper()
    bereinigterText = ''
    for c in grossText:
        if (ord(c) >= 65) and (ord(c) <= 90):
            bereinigterText = bereinigterText + c
    return bereinigterText

# Test
text = textLaden('Beispiel.txt')
print(text)
klar = textVorbereiten(text)
print(klar)
geheim = textCodieren(klar, 3)
print(geheim)
klar = textDecodieren(geheim, 3)

Beachte, dass die Datei mit dem vorbereiteten Text im selben Verzeichnis liegen muss wie die Datei mit dem Quelltext des Python-Programms.

Teste selbst die gezeigten Funktionen.

Hier ist auch noch eine Nachricht zum Entschlüsseln.

HPAKTRPTHPGZPCCHISJSXTHTKTGHRWAJTHHTAITCPRWGXRWITCIHRWAJTHHTACPHITGXMJCSDQTAXM
X

Fehler melden

X

Suche