Das Ziel besteht in der Entwicklung eines Klassendiagramms für die Umsetzung monoalphabetischer Verschlüsselungsverfahren und der Implementierung der notwendigen Methoden. Die Programmierung einer Benutzungsoberfläche erfolgt erst in einem nächsten Schritt.
Theoretische Voraussetzungen
Software
|
In der monoalphabetischen Verschlüsselung wird jedes Zeichen eines Klartextalphabetes kta durch genau ein Zeichen eines Geheimtextalphabetes gta ersetzt.
Es gibt verschiedene Verfahren, z. B. ROT13, Cäsar, monoalphabetische Codierung mit Schlüsselwort, Play-Fair, ...
Diese Verfahren unterscheiden sich nur in der Bestimmung des gta aus einem vorgegebenen Schlüssel.
Für die Umsetzung in einem Klassendiagramm ergeben sich aus dieser Beschreibung folgende Schlußfolgerungen:
Die Umsetzung dieser Vorgaben kann aufgrund der geringen Komplexität per Hand in BlueJ erfolgen. Einfacher ist jedoch die Verwendung eines UML-Tools (z. B. Jumli). Darin lassen sich Klassendiagramme mit Hilfe von Assistenten sehr schnell erstellen und in die entsprechende Programmiersprache übersetzen.
Für das gegebene Beispiel sehen das Klassendiagramm und der Quelltext wie folgt aus:
public abstract class MonoAlphaCode { protected String gta; protected String kta; public String deCrypt( String zeile ) { } public String enCrypt( String zeile ) { } } public class ROT13 extends MonoAlphaCode |
In der Methode enCrypt muss für jedes Zeichen der als Parameter übergebenden Zeile überprüft werden, ob es im Klartextalphabet vokommt. Falls dies der Fall ist, kann es im Geheimtext durch das entsprechende Zeichen des Geheimtextalphabetes ersetzt werden. Andernfalls wird es unverschlüselt an den Gehimtext angehängt.
public String enCrypt( String zeile ) { String gt = ""; zeile = zeile.toUpperCase(); while (zeile.length() > 0) { int pos = kta.indexOf(zeile.substring(0,1)); if (pos >= 0) { gt = gt + gta.substring(pos,pos+1); } else { gt = gt + zeile.substring(0,1); } zeile = zeile.substring(1, zeile.length()); } return gt; } |
Implementieren Sie die Methode deCrypt! |
Noch kann die Klasse MonoAlphaCode nicht genutzt werden. Es fehlt noch mindestens eine der abgeleiteten Klassen, da in ihrem Konstruktor die Attribute kta und gta erst initialisiert werden. Am einfachsten ist die Implementierung der Klasse ROT 13.
public class ROT13 extends MonoAlphaCode |
Jetzt können erste Experimente zur Ver- und Entschlüsselung mit Objekten der Klasse ROT13 durchgeführt werden.
Die Implementierung der Klasse Caesar erfordert die Lösung des folgenden Problems: Aus dem als Parameter key an den Konstruktor übergebenen Wert muss die Verschiebung des gta berechnet werden:
public class Caesar extends MonoAlphaCode |
Im letzen Schritt soll das Modell um eine Klasse MitKeyWort erweitert werden. Hier wird an den Konstruktor ein komplettes Schlüsselwort key übergeben. Die Buchstaben werden in der Reihenfolge ihres erstmaligen Auftretens in key in das gta übernommen. Anschließend werden alle Zeichen aus kta, die noch nicht in gta übernommen wurden, in umgekehrter Reihenfolge an gta angehängt.
Zum Beispiel liefert das Schlüsselwort "HALLO" das Geheimtextalphabet "HALOZYXWVUTSRQPNMKJIGFEDCB".
Implementieren Sie die Klasse MitKeyWort im UML-Diagramm und im BlueJ-Projekt. |