320
Wörterbücher, Dateien und der alte Cäsar
Kapitel
12
Password: Elfim1
Anmeldung misslungen!
Username: kkrahl
Password: Noram1
Anmeldung misslungen!
Username: kkrahl
Password: Karom1
Anmeldung misslungen!
Username:
Da das nicht endlos so weitergehen kann, solltest du nun noch eine Ab-
bruchmöglichkeit einbauen, falls dem Benutzer sein Passwort gerade nicht
einfällt. (Ich hoffe, diese Situation kommt dir nicht bekannt vor!) Beispiel:
Abbruch nach drei Abfragen
(passwort02.py)
. Oder: Abbruch, wenn eine
der beiden Eingaben leer ist.
Verschlüsseln
Verschlüsselung von Texten und von Daten ist heute eine ganz wichtige
und ziemlich komplizierte Sache. Aber schon vor 2000 Jahren wurden Ver-
fahren ersonnen, um Nachrichten zu verschlüsseln. Eines der ältesten und
bekanntesten ist der so genannte Cäsar-Code, den Julius Cäsar verwendet
hat, um militärische Nachrichten vor seinen Feinden im Gallischen Krieg
geheim zu halten.
Wir werden jetzt erkunden, wie man mit Python Texte nach Cäsars Verfah-
ren verschlüsseln kann. In diesem Abschnitt entwickeln wir kein Programm,
das diese Verschlüsselung vornimmt. Wir erforschen jedoch alle Bestandtei-
le, die so ein Programm braucht. Vielleicht hast du danach Lust, selbst ein
derartiges Programm zu entwickeln.
Ich finde, dass das eine gute Gelegenheit ist, einmal selbstständig ein et-
was umfangreicheres Programm zu entwerfen und zu erstellen.
Bevor wir mit einer interaktiven Sitzung mit der IDLE
(P
YTHON
GUI) begin-
nen, muss ich dir jedoch erklären, wie das Verschlüsselungsverfahren mit
dem Cäsar-Code geht:
Der Cäsar-Code
Beim Verschlüsselungsverfahren des Cäsar-Codes wird jeder Buchstabe
eines gegebenen so genannten
Klartextes
durch einen anderen Buchstaben
ersetzt. Dadurch entsteht der
Geheimtext
. Entscheidend ist nun die Erset-
zungsvorschrift, die angibt, welcher Buchstabe durch welchen ersetzt wer-
321
Verschlüsseln
den soll. Beim Cäsar-Code ist diese Vorschrift sehr einfach. Sie wird durch
die Angabe des Buchstaben, der das a ersetzen soll, festgelegt. Wenn bei-
spielsweise a durch g ersetzt werden soll, ergibt sich die Ersetzungsvor-
schrift für die anderen Buchstaben aus Folgendem:
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
Jeder Buchstabe im Klartext wird durch den darunter stehenden ersetzt,
also zum Beispiel i durch o oder u durch a. Es ist nahe liegend, diese Erset-
zungsvorschrift durch ein Dictionary folgender Art zu beschreiben:
code = { "a":"g", "b":"h", "c":"i", ... }
und so weiter.
Wir werden also zuerst eine Funktion entwickeln, die uns zu einem gege-
benen Startbuchstaben, der das a ersetzt, das zugehörige Code-Wörterbuch
zurückgibt:
>
Mach mit:
>>> klar = "abcdefghijklmnopqrstuvwxyz"
>>> len(klar)
26
Strings haben eine Methode
index()
, mit der du feststellen kannst, als
wievieltes Zeichen (mit dem nullten beginnend!) ein bestimmter Buchstabe
in dem String vorkommt.
>>> klar.index("a")
0
>>> klar.index("e")
4
>>> klar.index("z")
25
Klar!
>>> i = klar.index("g")
>>> i
6
Wir müssen das Klartextalphabet zerschnipseln und umordnen, um zum
Geheimtextalphabet zu gelangen. Versuche es mit »Scheiben«:
>>> klar[i:]
'ghijklmnopqrstuvwxyz'
>>> klar[:i]
'abcdef'
>>> geheim = klar[i:]+klar[:i]
322
Wörterbücher, Dateien und der alte Cäsar
Kapitel
12
>>> geheim
'ghijklmnopqrstuvwxyzabcdef'
>>> klar
'abcdefghijklmnopqrstuvwxyz'
Schön! Jetzt haben wir schon das da stehen, was ich dir oben zur Erklärung
des Cäsar-Codes aufgeschrieben habe. Konstruieren wir nun einmal Stück
für Stück unser Code-Wörterbuch:
>>> code = {}
>>> code["a"] = "g"
>>> code["b"] = "h"
>>> code
{'a': 'g', 'b': 'h'}
Das wirst du kaum so für jeden Buchstaben hinschreiben wollen. Nimm
also einen Index
j
:
>>> j = 2
>>> klar[j]
'c'
>>> geheim[j]
'i'
>>> code[klar[j]] = geheim[j]
>>> code
{'a': 'g', 'c': 'i', 'b': 'h'}
Dies lässt sich doch für alle
j
von 0 bis 25 automatisieren:
>>> code = {}
>>> for j in range(26):
code[klar[j]] = geheim[j]
>>> code
{'a': 'g', 'c': 'i', 'b': 'h', 'e': 'k', 'd': 'j', 'g': 'm',
'f': 'l', 'i': 'o', 'h': 'n', 'k': 'q', 'j': 'p', 'm': 's',
'l': 'r', 'o': 'u', 'n': 't', 'q': 'w', 'p': 'v', 's': 'y',
'r': 'x', 'u': 'a', 't': 'z', 'w': 'c', 'v': 'b', 'y': 'e',
'x': 'd', 'z': 'f'}
Etwas durcheinander zwar – das kennen wir ja schon von Dictionaries –,
aber alles wie gewünscht da. Machen wir daraus eine Funktion! (Wenn dir
das lieber ist, kannst du die folgende Funktionsdefinition auch gleich in ein
Editor-Fenster der IDLE schreiben.) Sie soll zu jedem Klartextbuchstaben
den zugehörigen Cäsar-Code erzeugen:

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.