14.3 Abschließende Aufgabe

Aufgabe

Aufgabe 14-10: Caesar-Verschlüsselung

Die Caesar-Verschlüsselung ist eine einfache Art Nachrichten zu verschlüsseln, die jedoch sehr leicht durch Ausprobieren „geknackt“ werden kann.

Bei der Verschlüsselung wird jeder Buchstabe der unverschlüsselten Nachricht (Klartext) um eine bestimmte Anzahl von Stellen im Alphabet nach rechts verschoben. Das Ergebnis ist die verschlüsselte Nachricht (Geheimtext).

Beim Entschlüsseln geht man genau umgekehrt vor und verschiebt jeden Buchstaben des Geheimtextes um den Wert des vereinbarten Schlüssels in die Gegenrichtung.

Merke: Caesar-Verschlüsselung

In der Kryptographie ist es üblich, den Klartext in Kleinbuchstaben und den Geheimtext in Großbuchstaben zu schreiben.

Beispiel

Wird als Schlüssel 3 vereinbart, wird aus jedem ‚a‘ in der unverschlüsselten Nachricht (Klartext) ein ‚D‘ in der verschlüsselten Nachricht (Geheimtext).

Beim Entschlüsseln wird aus einem ‚D‘ im Geheimtext ein ‚a‘ im Klartext.

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
geheim: 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
Abb. 14-49: Geheimalphabet
Konsole
Test: Caesar-Verschlüsselung
--------------------------------------------------
Schlüssel: 3
Klartext: hallo
==================================================
Verschlüsselte Nachricht: KDOOR
Entschlüsselte Nachricht: hallo
Abb. 14-50: Verschlüsselung und Entschlüsselung einer Nachricht
Aufgabe
  1. Entwickeln Sie eine geeignete Fachklasse zum Ver- und Entschlüsseln von Nachrichten mittels der Caesar-Verschlüsselung.
    Hinweise:
    • Informieren Sie sich zunächst über das Thema Kodierung von Zeichen.
    • Um ein bestimmtes Zeichen aus einem String auszulesen, kann die Methode +charAt(index: int): char  genutzt werden. Als Parameter wird dabei die Stelle übergeben, an der sich das gewünschte Zeichen in dem betreffenden String befindet. Der ersten Stelle eines Strings ist dabei der Index 0 zugeordnet, der zweiten Stelle der Index 1 und der letzten Stelle der Index Stringlänge - 1.
    • Für eine Umwandlung von Groß- in Kleinbuchstaben stellt die Klasse String die Methode +toLowerCase(): String  und für eine Umwandlung von Klein- in Großbuchstaben die Methode +toUpperCase(): String  bereit.
    img/Abb_14_51_UML_String.svg
    Abb. 14-51: Klasse String (UML)
    Lösung
    Lösung
    JAVA
    public class Verschluesselung {

        public static String verschluesseln(String pKlartext, int pSchluessel){
            char zeichen;
            int unicode;
            String geheimtext = "";
            String klartext = pKlartext.toLowerCase();

            for(int stelle=0; stelle<klartext.length(); stelle++){
                zeichen = klartext.charAt(stelle);
                unicode = (int)zeichen;
                
                if(unicode>=97 && unicode <= 122) {
                    if(unicode + pSchluessel <= 122) {
                        unicode = unicode + pSchluessel;
                    }
                    else {
                        unicode = unicode + pSchluessel - 26;
                    }
                }
                
                geheimtext = geheimtext + (char)unicode;
            }

            return geheimtext.toUpperCase();
        }

        public static String entschluesseln(String pGeheimtext, int pSchluessel){
            char zeichen;
            int unicode;
            String klartext ="";
            String geheimtext = pGeheimtext.toUpperCase();
            
            for(int stelle=0; stelle<geheimtext.length(); stelle++){
                zeichen = geheimtext.charAt(stelle);
                unicode = (int)zeichen;
                
                if(unicode>=65 && unicode<=90) {
                    if(unicode - pSchluessel >= 65) {
                        unicode = unicode - pSchluessel;
                    }
                    else {
                        unicode = unicode - pSchluessel + 26;
                    }
                }
                
                zeichen = (char)unicode;
                klartext = klartext + zeichen;
            }

            return klartext.toLowerCase();
        }
    }
    Abb. 14-52: Klasse Verschluesselung (Quellcode)
  2. Testen Sie ihre Fachklasse mit Hilfe einer geeigneten Testklasse. Lösung
    Lösung
    JAVA
    public class Test {

        public static void main(String[] args) {
            System.out.println(Verschluesselung.verschluesseln("XYZ", 3));
            System.out.println(Verschluesselung.entschluesseln("ABC", 3));
        }

    }
    Abb. 14-53: Klasse Test (Quellcode)