Beispiel - Verschlüsselung von Nachrichten
Ein einfaches Verfahren
Im dem Buch Die wilden Hühner von Cornelia Funke benutzt eine Gruppe von Schüler(innen) eine Art Geheimschrift, um Nachrichten verschlüsselt weiterzugeben. Hier ein Beispiel für eine verschlüsselte Nachricht:
neffert mmedfua knehcdä shcänol esuapet rowedoc nhuht
Aufgabe 1
Alles klar? Hast du die Nachricht bereits entschlüsselt? Wenn nicht, dann benutze diese Hilfe:
treffen aufdemm knehcdä shcänol esuapet rowedoc nhuht
Aufgabe 2
Verschlüssele analog eine selbst gewählte Nachricht mit einer vorgegebenen Blocklänge und gib sie an deinen Nachbarn zum Entschlüsseln weiter.
Der Verschlüsselungsalgorithmus
Wir spielen das Verschlüsselungsverfahren zuerst mit der Nachricht 'heuteabdersechtenstundehitzefrei' konkret durch. Für die Aufteilung in Blöcke benutzen wir die Wortlänge 6.
teilWort : altesWort: heuteabdersechtenstundehitzefrei neuesWort: # teilWort : heutea altesWort: bdersechtenstundehitzefrei neuesWort: aetueh # teilWort : bderse altesWort: chtenstundehitzefrei neuesWort: aetueh esredb # teilWort : chtens altesWort: tundehitzefrei neuesWort: aetueh esredb snethc # teilWort : tundeh altesWort: itzefrei neuesWort: aetueh esredb snethc hednut # teilWort : itzefr altesWort: ei neuesWort: aetueh esredb snethc hednut rfezti # teilWort : ei altesWort: neuesWort: aetueh esredb snethc hednut rfezti ie
Dieses Verfahren lässt sich leicht automatisieren. Hier eine mögliche Formulierung des Algorithmus.
ALGORITHMUS verschluesselterText: Übergabe: text, blocklaenge alterText = text neuerText = '' solange die Länge von alterText größer oder gleich blocklaenge ist: teilwort = erstes Teilwort mit der Länge blocklaenge von alterText alterText = Rest von alterText ohne das erste Teilwort mit Länge blocklaenge neuerText = neuerText, dann ein Leerzeichen, dann die Umkehrung von teilwort teilwort = alterText neuerText = neuerText, dann ein Leerzeichen, dann die Umkehrung von teilwort Rückgabe: neuerText
Das automatisierte Verschlüsseln von Texten soll mit Hilfe einer geeigneten Funktion erfolgen. Das folgende Black-Box-Diagramm verdeutlicht das Verhalten dieser Verschlüsselungsfunktion.
Ziel ist es, die beschriebene Funktion unter Berücksichtigung des gezeigten Algorithmus zu implementieren.
Verarbeitung von Zeichenketten
Texte werden als Objekte von Typ Zeichenketten dargestellt. Bevor das oben beschriebene Verfahren zum Verchlüsseln von Texten in Python implementiert werden kann, muss du dich mit der Verarbeitung von Zeichenketten auseinandersetzen. Bearbeite hierzu vorab die folgenden Aufgaben. Die erforderlichen Hintergrundinformationen findest du im nächsten Abschnitt.
Aufgabe 3: Zugriff auf die Zeichen einer Zeichenkette
Der folgende Python-Dialog zeigt, wie man auf einzelne Zeichen einer Zeichenkette zugreift.
>>> text = 'Heute hitzefrei!'
>>> text[4]
'e'
>>> text[5]
' '
>>> text[15]
'!'
>>> text[16]
Traceback (most recent call last):
File ...
text[16]
IndexError: string index out of range
>>> len(text)
16
>>> text[len(text)-1]
'!'
>>> text[0] = 'h'
Traceback (most recent call last):
File ...
text[0] = 'h'
TypeError: 'str' object does not support item assignment
Probiere das mit einem eigenen Text selbst aus. Kläre dabei die folgenden Fragen: Wie wird eine Zeichenkette in Python dargestellt? Wie greift man auf die einzelnen Zeichen einer Zeichenkette zu? Was muss man dabei beachten? Lies dir hierzu auch die Ausführungen auf der nächsten Seite durch.
Aufgabe 4: Zugriff auf mehrere Zeichen einer Zeichenkette
Der folgende Python-Dialog zeigt, wie man auf Teile einer Zeichenkette zugreift.
>>> text[2:5]
'ute'
>>> text[0:6]
'Heute '
>>> text[:6]
'Heute '
>>> text[6:]
'hitzefrei!'
>>> text
'Heute hitzefrei!'
>>> text = text[6:]
>>> text
'hitzefrei!'
Probiere das mit einem eigenen Text selbst aus. Erkläre, wie die Ergebnisse zustande kommen.
Aufgabe 5: Eine Zeichenkette durchlaufen
(a) Es gibt zwei Möglichkeiten, eine Zeichenkette als sequentielles Datenobjekt Schritt für Schritt zu durchlaufen: zum Einen über den Index, zum Anderen direkt über die Zeichen. Lies dir erst einmal die Ausführungen zu diesem Thema auf der nächsten Seite durch.
(b) Stelle erst eine Vermutung auf, was das folgende Programm leistet. Überprüfe anschließend deine Vermutung. Erkläre dann die einzelnen Anweisungen des Programms.
# Initialisierung
text = 'Heute hitzefrei!'
# Verarbeitung
i = 0
while i < len(text):
print(text[i])
i = i+1
(c) Stelle auch hier erst eine Vermutung auf, was das folgende Programm leistet. Überprüfe anschließend deine Vermutung. Erkläre dann die einzelnen Anweisungen des Programms.
# Initialisierung
text = 'Heute hitzefrei!'
# Verarbeitung
zaehler = 0
for zeichen in text:
if zeichen in 'aeiou':
zaehler = zaehler + 1
# Ausgabe
print(zaehler)
Aufgabe 6: Eine Zeichenkette aufbauen
Häufig kommt es vor, dass man eine neue Zeichenkette ausgehend von einer bereits bestehenden
Zeichenkette aufbauen möchte. Hierzu verwendet man meist den +
-Operator. Lies dir die
entsprechenden Ausführungen auf der nächsten Seite durch.
(a) Ergänze den folgenden Python-Dialog. Überprüfe deine Ergebnisse mit Python.
>>> text1 = 'ROT'
>>> text2 = ''
>>> text2 = text1[0] + text2
>>> text1 = text1[1:]
>>> text1
...
>>> text2
...
>>> text2 = text1[0] + text2
>>> text1 = text1[1:]
>>> text1
...
>>> text2
...
>>> text2 = text1[0] + text2
>>> text1 = text1[1:]
>>> text1
...
>>> text2
...
(b) Was leistet das gezeigte Programm? Kannst du es ohne vorheriges Ausprobieren vorhersagen? Überprüfe deine Vermutung.
# Initialisierung
text = 'Heute hitzefrei!'
# Verarbeitung
textNeu = ''
for zeichen in text:
textNeu = textNeu + zeichen + zeichen
# Ausgabe
print(textNeu)
Implementierung des Verschlüsselungsverfahrens
Mit den Grundoperationen zur Verarbeitung von Zeichenketten lässt sich jetzt das Verschlüsselungsverfahren implementieren. Bearbeite hierzu die folgenden Aufgaben.
Aufgabe 7: Eine Zeichenkette umkehren
Es ist günstig, erst einmal eine Funktion zur Umkehrung von Zeichenketten zu entwickeln.
Entwickle eine Funktionsdefinition und teste sie gründlich.
Aufgabe 8: Einen Text verschlüsseln
Entwickle jetzt eine Funktionsdefinition für die Funktion verschluesselterText
.
orientiere dich an dem oben beschriebenen Algorithmus.
Aufgabe 9: Einen Text entschlüsseln
Entwickle eine Funktionsdefinition zur Entschlüsselung von Texten, die mit dem beschriebenen Verfahren verschlüsselt wurden.