Funktionen als Bausteine verwenden
Ein Verschlüsselungsprogramm mit Bausteinen erstellen
Gegeben ist eine Zuordnungstabelle, die Buchstaben willkürlich neue Buchstaben zuordnet - jedoch so, dass die Zuordnung eindeutig bleibt.
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 K X C S L Z U A H W D B M T Y E N J V P O I R F Q
Anstatt jetzt selbst Funktionen zur Durchführung einer Verschlüsselung mit einer solchen Zuordnungstabelle zu entwickeln, wollen wir hier auf fertig implementierte Funktionen zurückgreifen und diese zum Ver- und Entschlüsseln von Texten verwenden.
Wir gehen davon aus, dass die folgenden Funktionsdefinitionen in einer Datei
verschluesselung_mit_zuordnungstabelle.py
abgespeichert sind.
# -*- coding: utf-8 -*-
# Darstellung von Zuordnungstabellen:
#
# Zuordnungstabelle:
#
# A B C D E F . . .
# | | | | | | . . .
# G K X C S L . . .
#
# Zur Darstellung wird eine Zeichenkette gebildet,
# die die zugeordneten Zeichen der Reihe nach auflistet.
#
# 'GKXCSL...'
#
def verschluesseltesZeichen(zeichen, schluessel):
# zeichen: Großbuchstabe
# schluessel: Zuordnungstabelle in Form einer Zeichenkette
# return: zum übergebenen Buchstaben zugeordneter Buchstabe
# Beispiel:
"""
>>> verschluesseltesZeichen('B', 'GKXCSLZUAHWDBMTYENJVPOIRFQ')
'K'
"""
nummer = ord(zeichen)-ord('A')
neuesZeichen = schluessel[nummer]
return neuesZeichen
def verschluesselterText(klartext, schluessel):
# klartext: Zeichenkette aus Großbuchstaben
# schluessel: Zuordnungstabelle in Form einer Zeichenkette
# return: neue, mit der Zuordnungstabelle konstruierte Zeichenkette
# Beispiel:
"""
>>> verschluesselterText('HUND', 'GKXCSLZUAHWDBMTYENJVPOIRFQ')
'UPMC'
"""
geheimtext = ''
for zeichen in klartext:
neuesZeichen = verschluesseltesZeichen(zeichen, schluessel)
geheimtext = geheimtext + neuesZeichen
return geheimtext
def entschluesseltesZeichen(zeichen, schluessel):
# ...
i = 0
while i < 26:
if schluessel[i] == zeichen:
nummer = i
i = i + 1
neuesZeichen = chr(ord('A')+nummer)
return neuesZeichen
def entschluesselterText(geheimtext, schluessel):
# ...
klartext = ''
for zeichen in geheimtext:
neuesZeichen = entschluesseltesZeichen(zeichen, schluessel)
klartext = klartext + neuesZeichen
return klartext
def bereinigterText(text):
# ...
textNeu = ''
for zeichen in text:
if ord(zeichen) >= ord('A') and ord(zeichen) <= ord('Z'):
# zeichen ist ein Großbuchstabe
textNeu = textNeu + zeichen
elif ord(zeichen) >= ord('a') and ord(zeichen) <= ord('z'):
# zeichen ist ein Kleinbuchstabe
neuesZeichen = chr(ord(zeichen)-32)
textNeu = textNeu + neuesZeichen
elif zeichen == 'Ä' or zeichen == 'ä':
textNeu = textNeu + 'AE'
elif zeichen == 'Ö' or zeichen == 'ö':
textNeu = textNeu + 'OE'
elif zeichen == 'Ü' or zeichen == 'ü':
textNeu = textNeu + 'UE'
elif zeichen == 'ß':
textNeu = textNeu + 'SS'
return textNeu
Funktionen kann man auch benutzen, wenn man sie nicht selbst definiert hat. Voraussetzung dafür ist, dass man genau weiß, welche Daten man der Funktion zur Verarbeitung übergeben muss und was die Funktion als Ergebnis zurückgibt. In einer Schnittstellenbeschreibung werden alle diese Informationen genau beschrieben.
Aufgabe 1
(a) Die Funktionsdefinitionen zu den Funktionen verschluesseltesZeichen
und verschluesselterText
enthalten bereits Schnittstellenbeschreibungen. Schaue dir diese Beschreibungen genau an, damit du weißt, wie man
die beiden Funktionen verwenden kann.
(b) Speichere jetzt die gezeigten Funktionsdefinitionen in einer Datei mit dem
Dateinamen verschluesselung_mit_zuordnungstabelle.py
ab.
Erstelle anschließend ein Testprogramm wie das folgende, das die beiden Funktionen verwendet.
# Import der Funktionen from verschluesselung_mit_zuordnungstabelle import * # Verwendung der Funktionen zuordnung = 'GKXCSLZUAHWDBMTYENJVPOIRFQ' geheimtext = verschluesselterText('SALVEASTERIX', zuordnung) print(geheimtext)
(c) Fertige entsprechende Schnittstellenbeschreibungen zu den anderen oben vorgegebenen Funktionen an. Erstelle auch ein Testprogramm, das diese Funktionen verwendet.
(d) Erstelle ein benutzerfreundliches Programm zum Verschlüsseln / Entschlüsseln von Texten mit Hilfe einer fest vorgegebenen Zuordnungstabelle. Dabei sollen importierte Funktionen als Bausteine verwendet werden.