Beispiel - Caesar-Verschlüsselung
Geheime Nachrichten
Die Übermittlung geheimer Nachrichten hat eine lange Tradition. Seitdem schriftlich fixierte Nachrichten von einem Sender an einen Empfänger überbracht werden, tritt das Problem auf, dass bestimmte Nachrichten nur für den Empfänger bestimmt sind und während des Transports nicht von Unbefugten mitgelesen werden sollen. Schon sehr früh hat man zur Lösung dieses Problems Verfahren entwickelt, mit denen eine Nachricht ver- und wieder entschlüsselt werden kann.
Auch der römische Staatsmann und Feldherr Julius Caesar (* 100 v. Chr. in Rom; † 44 v. Chr. in Rom) benutzte ein Verfahren zum Verschlüsseln von Nachrichten.
Caesar ließ jeden Buchstabe durch einen im Alphabet verschobenen Buchstaben ersetzen.
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 | | | | | | | | | | | | | | | | | | | | | | | | | | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Das folgende Beispiel zeigt das Resultat seiner Verschlüsselungsmethode.
S A L V E A S T E R I X | | | | | | | | | | | | V D O Y H D V W H U L A
Aufgabe 1
(a) Entschlüssele die in der Abbildung gezeigte Antwort von Asterix.
(b) Verschlüssele analog eine selbst gewählte Nachricht. Benutze jetzt eine Alphabetverschiebung um 7 Zeichen, die 'A' durch 'H' ersetzt. Gib die Nachricht zusammen mit dem Schlüssel an deine Nachbarin bzw. deinen Nachbarn weiter. Sie bzw. er soll die verschlüsselte Nachricht dann wieder entschlüsseln.
Codierung von Zeichen
Für eine automatisierte Verschlüsselung von Nachrichten mit dem Verschiebeverfahren ist es günstig, wenn man auf die ASCII-Codierung der Zeichen zurückgreifen kann.
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 Python 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 vordefinierte Funktion chr
(gemäß ASCII-Tabelle) einer natürlichen Zahl (aus einem
bestimmten Zahlenbereich) ein Zeichen zu.
Mit diesen Hilfsfunktionen lassen sich jetzt einfache Verarbeitungsmöglichkeiten von Zeichen realisieren.
Ein Programm zur Buchstabenverschiebung
Die Buchstabenverschiebung lässt sich in Python sehr leicht mit Hilfe der Funktionen ord
und chr
realisieren.
Aufgabe 2
(a) Das Python-Programm zur Buchstabenverschiebung funktioniert nicht, wenn man z.B. zeichen = 'T'
und schluessel = 10
vorgibt. Teste und begründe.
(b) Ändere das Python-Programm zur Buchstabenverschiebung so ab, dass es für alle sinnvollen Vorgaben zeichen = ...
und schluessel = ...
korrekt funktioniert.
Eine Funktion zur Buchstabenverschiebung
Beim Verschiebeverfahren wird jedem Buchstaben des (Großbuchstaben-) Alphabets ein verschobener Buchstabe zugeordnet. Für die Zuordnung muss zusätzlich die Verschiebezahl als Schlüssel vorgegeben werden.
Wir beschreiben das Verhalten dieser Buchstabenverschiebung mit einer Funktion verschiebung
.
Diese neue Funktion lässt sich in Python wie folgt definieren und verwenden.
Aufgabe 3
Der letzte Funktionsaufruf liefert noch nicht das beabsichtigte Ergebnis. Ändere die Funktionsdefinition geeignet ab. Teste die Funktion dann mit weiteren Funktionsaufrufen
Eine Funktion zur 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 mit dem schluessel das zu c verschobene Zeichen d füge d am Ende an die von neuerText verwaltete Zeichenkette an Rückgabe: neuerText
Aufgabe 4
Ergänze die Funktionsdefinitionen im folgenden Programmgerüst passend.
Benutze für die Funktion verschiebung
das (korrekte) Ergebnis aus Aufgabe 3.
Die Funktionsdefinition zur Funktion verschluesselung
kann sich am gezeigten Algorithmus orientieren.
Günstig ist es, die Funktion verschiebung
dabei zu benutzen. Teste mit verschiedenen Funktionsaufrufen.
Aufgabe 5
(a) Texte, die mit der Funktion verschluesselung
verschlüsselt wurden, können mit derselben Funktion
entschlüsselt werden, wenn man den Schlüssel geeignet wählt. Zeige das mit geeigneten Beispielen.
(b) 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
.
Quellen
-
[1]: Asterix und Caesar - Urheber: KB - Lizenz: inf-schule.de
unter Verwendung von:
- Portrait Julius Caesar - Urheber: Amadscient -