Funktionen zur Implementierung des Verschiebevefahrens
Codierung von Zeichen
Zeichen werden intern im Rechner durch Bitfolgen codiert. In Abschnitt Exkurs - ASCII-Code findest du die einfache und vielfach genutzte ASCII-Codierung von Zeichen.
Da man die Bitmuster in der ASCII-Codierung auch als Zahlen deuten kann, lässt sich jedem Zeichen (aus einem vorgegebenen Zeichenvorrat) eine natürliche Zahl (aus einem passenden Zahlenbereich) zuordnen und umgekehrt. Dem Zeichen 'A' lässt sich beispielsweise nach dem ASCII-Code die Zahl 65 zuordnen.
Zeichen | Zahl |
---|---|
A | 65 |
B | 66 |
C | 67 |
... | ... |
Auf diese Zuordnung zwischen Zeichen und Zahlen kann man in Pythen wie folgt zugreifen. Probiere das selbst einmal aus.
Beachte, dass Zeichen in Python mit Hochkommata dargestellt werden. Zeichen sind hier Daten vom Datentyp str
.
Die vordefinierte Funktion ord
ordnet jedem Zeichen (gemäß ASCII-Tabelle) eine natürliche Zahl zu.
Umgekehrt ordnet die Funktion chr
(gemäß ASCII-Tabelle) einer natürlichen Zahl (aus einem
bestimmten Zahlenbereich) ein Zeichen zu.
Verschiebung von Zeichen
Beim Verschiebeverfahren wird jedem Buchstaben des (Großbuchstaben-) Alphabets ein verschobener Buchstabe zugeodnet. Für die Zuordnung muss zusätzlich der Schlüssel vorgegeben werden.
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 | | | | | | | | | | | | | | | | | | | | | | | | | | J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
Im vorliegenden Beispiel wird dem Buchstaben K
der Buchstabe T
zugeordnet. Der Schlüssel für die
Verschiebung ist der Buchstabe J
.
Wir beschreiben das Verhalten dieser Buchstabenverschiebung mit einer Funktion verschiebung
.
Diese neue Funktion lässt sich in Python wie folgt definieren und verwenden.
Aufgabe 1
(a) Erkläre alle Bestandteile des Programms.
(b) Der letzte Funktionsaufruf liefert noch nicht das beabsichtigte Ergebnis. Ändere die Funktionsdefinition geeignet ab. Teste die Funktion dann mit weiteren Funktionsaufrufen
Verschlüsselung mit dem Verschiebeverfahren
Ziel ist es, die Verschlüsselung von Nachrichten mit dem Verschiebeverfahren ebenfalls mit einer Funktion zu realisieren.
Das Verhalten dieser Funktion verschluesselung
lässt sich mit einem Black-Box-Diagramm beschreiben.
Für die Implementierung mit einer Funktionsdefinition kann man den folgenden Algorithmus benutzen. Beachte, dass wir davon ausgehen, dass eine Nachricht nur aus den Großbuchstaben 'ABC...XYZ' besteht.
ALGORITHMUS verschluesselung: Übergabe: text, schluessel neuerText = '' für alle Zeichen c in klartext: ermittle zum Zeichen c mit dem schluessel das verschobene Zeichen d füge d am Ende an die von neuerText verwaltete Zeichenkette an Rückgabe: neuerText
Aufgabe 2
Ergänze die Funktionsdefinitionen im folgenden Programmgerüst passend.
Benutze für die Funktion verschiebung
das (korrekte) Ergebnis aus Aufgabe 1.
Die Funktionsdefinition zur Funktion verschluesselung
kann sich am gezeigten Algorithmus orientieren.
Teste mit verschiedenen Funktionsaufrufen.
# Funktionsdefinitionen
def verschiebung(zeichen, schluessel):
...
return ...
def verschluesselung(klartext, schluessel):
...
return ...
# Funktionsaufrufe
print(verschluesselung('ROM', 'J'))
...
Aufgabe 3
Die Entschlüsselung von Texten, die mit dem Verschiebeverfahren verschlüsselt wurden, sollen mit demselben Schlüssel
entschlüsselt werden. Entwickle hierfür eine geeignete Funktion entschluesselung
.