i

Monoalphabetische Verfahren

Verbesserung des Verschiebeverfahren

Das Verschiebeverfahren hat den Nachteil, dass Geheimtexte sehr leicht geknackt werden können. Man kann ja schnell alle möglichen Alphabetverschiebungen durchtesten.

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
| | | | | | | | | | | | | | | | | | | | | | | | | |
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 G 

Ziel ist es, das Verfahren zu verbessern. Statt Buchstaben systematisch um eine feste Zahl im Alphabet zu verschieben, benutzen wir eine Zuordnungstabelle, die Buchstaben willkürlich neue Buchstaben zuordnet - jedoch so, dass die Zuordnung eindeutig bleibt. Hier ein Beispiel für eine solche Zuordnungstabelle:

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

Beim Verschlüsseln muss man jeweils in der Tabelle nachschauen, durch welchen Buchstaben ein gegebener ersetzt wird.

Aufgabe 1

(a) Ergänze die begonnene Verschlüsselung des Textes 'JULIUSCAESAR' mit der oben vorgegebenen Zuordnungstabelle.

J U L I U S C A E S A R
| | | | | | | | | | | |
H P D A P J . . . . . .

(b) Kannst du den folgenden Text - der mit der oben gegebenen Zuordnungstabelle verschlüsselt wurde - wieder entschlüsseln? Wie muss man dabei vorgehen?

. . . . . . . . . . . .
| | | | | | | | | | | | 
J G D O S G J V S N A R

Black-Box-Modellierung

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

Eine solche Zuordnungstabelle lässt sich auch kurz durch eine Zeichenkette bestehend aus den zugeordneten Zeichen darstellen. Im vorliegenden Beispiel wäre das die Zeichenkette 'GKXCSLZUAHWDBMTYENJVPOIRFQ'

Das Verhalten der Funktion verschluesselungTabelle lässt sich somit wie folgt beschreiben:

Black-Box-Diagramm

Bausteine verwenden

Wir gehen davon aus, dass die folgenden Funktionsdefinitionen in einer Datei verschluesselung_mit_zuordnungstabelle.py abgespeichert sind.

# 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 verschluesselungTabelle(klartext, schluessel):

    # klartext: Zeichenkette aus Großbuchstaben
    # schluessel: Zuordnungstabelle in Form einer Zeichenkette
    # return: neue, mit der Zuordnungstabelle konstruierte Zeichenkette
    # Beispiel:

    """
    >>> verschluesselungTabelle('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 entschluesselungTabelle(geheimtext, schluessel):
    
    # ...
    
    klartext = ''
    for zeichen in geheimtext:
        neuesZeichen = entschluesseltesZeichen(zeichen, schluessel)
        klartext = klartext + neuesZeichen
    return klartext

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 2

(a) Die Funktionsdefinitionen zu den Funktionen verschluesseltesZeichen und verschluesselungTabelle 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 = verschluesselungTabelle('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.

Aufgabe 3

Ziel ist es, mit einer Funktion Zuordnungstabellen zu erzeugen, die dann zur Verschlüsselung benutzt werden können. Die Funktion soll als Baustein mit einer Schnittstellenbeschreibung bereit gestellt werden.

(a) Entwickle eine Funktion, mit der man eine Zuordnungstabelle per Zufall erzeugen kann. Benutze hierzu die vordefinierte Funktion randint des Moduls random. Beachte, dass die Zuordnungstabelle eindeutig sein soll.

(b) (schwierig) Die Zuordnungstabelle wird als Schlüssel beim Ver-und Entschlüsseln benutzt. Dieser Schlüssel hat den Nachteil, dass man ihn sich nicht gut merken kann. Es gibt eine einfache Möglichkeit, eine unregelmäßig erscheinende Zuordnungstabelle aus einen Schlüsselwort zu erzeugen. Als Schlüsselwort wählen wir INITIALISIERUNGVONVARIABLEN. Dieses Schlüsselwort benutzen wir, um die zugeordneten Buchstaben zu bestimmen. Zuerst werden alle mehrfach vorkommenden Buchstaben gelöscht. Es bleibt die Zeichenkette I N T A L S E R U G V O B. Diese benutzen wir für den Anfang der Codierungstabelle. Die restlichen Buchstaben in der Codierungstabelle ergänzen wir nach einem festen Schema: Hier sind die noch nicht benutzten Buchstaben des Alphabets der Reihe nach hinzugefügt worden. Alles klar?

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
| | | | | | | | | | | | | | | | | | | | | | | | | |
I N T A L S E R U G V O B C D F H J K M P Q W X Y Z

Entwickle eine Funktion, mit der man aus einem Schlüsselwort mit dem beschriebenen Verfahren die Zuordnungsliste bestimmt.

(c) (schwierig) Denke dir selbst ein Verfahren aus, mit dem man eine ungeordnet erscheinende Zuordnungstabelle aus einem Schlüsselwort erzeugen kann.

Suche

v
6.3.1.3.4.4
www.inf-schule.de/imperative-programmierung/python/projekte/modularisierung/verschluesselung/zuordnungstabelle
www.inf-schule.de/6.3.1.3.4.4

Rückmeldung geben