i

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.

Asterix: VDOYHDVWHULA; Caesar: KDOORFDHVDUZLUKDEHQGHLQYHUVFKOXHVVHOXQJVYHUIDKUHQJHNQDFNW[1]

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.

<Black-Box-Diagramm><Funktionsname>ord</Funktionsname><Übergaben><Übergabe><Wert>'A'</Wert><Variable></Variable></Übergabe></Übergaben><Rückgabe><Text>return</Text><Wert>65</Wert></Rückgabe></Black-Box-Diagramm>

Umgekehrt ordnet die vordefinierte Funktion chr (gemäß ASCII-Tabelle) einer natürlichen Zahl (aus einem bestimmten Zahlenbereich) ein Zeichen zu.

<Black-Box-Diagramm><Funktionsname>chr</Funktionsname><Übergaben><Übergabe><Wert>65</Wert><Variable></Variable></Übergabe></Übergaben><Rückgabe><Text>return</Text><Wert>'A'</Wert></Rückgabe></Black-Box-Diagramm>

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.

Black-Box-Diagramm

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.

Black-Box-Diagramm

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

Suche

v
6.3.2.11.1
dev.inf-schule.de/imperative-programmierung/python/konzepte/funktion/beispiel_caesar
dev.inf-schule.de/6.3.2.11.1
dev.inf-schule.de/@/page/Sse56DyZmkNIVLS9

Rückmeldung geben