Schreibe ein Programm für die Caesar-Verschlüsselung, das einen Text mit einem bestimmten Schlüssel ver- oder entschlüsseln kann. Verwende eine beliebige Programmiersprache!

Du kannst die folgende Methode verwenden um einen einzelnen Großbuchstaben (in Java "char") um eine bestimmte Zahl im Alphabet zu verschieben:

(Quellcode in Java)

/**
 * Verschiebt den Großbuchstaben um die angegebene Verschiebung. 
 * Nach Z wird wieder bei A begonnen.
 * 
 * @param buchstabe
 * @param verschiebung
 * @return verschobener Buchstabe
 */
public static char verschieben(char buchstabe, int verschiebung){
    //Buchstaben werden als Zahl gespeichert,
    //das erlaubt einfache Verschiebung:
    if(buchstabe>='A' && buchstabe <='Z'){ //Sonderzeichen ausschließen
        buchstabe += verschiebung;
        while(buchstabe > 'Z'){
            buchstabe -= 26;
        }
    }

    return buchstabe;
}

Hier wird eine Lösung in Java erarbeitet. Der gesamte Code ist unten nochmal zusammengefasst.
Du kannst die Caesar-Verschlüsselung aber auch in einer Tabellenkalkulations-Software programmieren. Wie das geht lernst du hier.

Hast du eine andere Programmiersprache verwendet? Schreibe einen Kommentar und lass so andere an deinen Ideen teilhaben!

Ein Code könnte so aussehen:

public class CaesarVerschluesselung {

    public static void main(String[] args){

    }
}

Schritt 2: Methode "verschluesseln" erstellen

Die Methode hat den Rückgabewert String (sie gibt einen Text zurück), als Parameter benötigt man den Klartext und den Schlüssel. Der Code für die Methode sieht also wie folgt aus:

/**
 * Verschlüsselt den Klartext mit dem Schlüssel und gibt den Geheimtext zurück
 * @param klartext
 * @param schluessel
 * @return verschlüsselter text
 */
public static String verschluesseln(String klartext, int schluessel){

}

Als Hilfsmittel ist eine Methode nützlich, die einen Buchstaben (in Java "char" um einen bestimmten Wert verschiebt. Das erledigt die folgende Methode:

/**
 * Verschiebt den Buchstaben um die angegebene Verschiebung, 
 * nach Z wird wieder bei A begonnen.
 * 
 * @param buchstabe
 * @param verschiebung
 * @return verschobener Buchstabe
 */
public static char verschieben(char buchstabe, int verschiebung){
    //Buchstaben werden als Zahl gespeichert,
    //das erlaubt einfache Verschiebung:
    if(buchstabe>='A' && buchstabe <='Z'){ //Sonderzeichen ausschließen
        buchstabe += verschiebung;
        while(buchstabe > 'Z'){
            buchstabe -= 26;
        }
    }

    return buchstabe;
}

Damit kannst du nun die verschlüsseln Methode fertig schreiben:

public static String verschluesseln(String klartext, int schluessel){
    String geheimtext = ""; //Zuerst noch leer
    klartext = klartext.toUpperCase(); //Alles in Großbuchstaben umwandeln
    for(int i=0; i<klartext.length(); i++){
        //für alle einzelnen Buchstaben: Verschieben und an den Geheimtext anhengen
        char naechstes = klartext.charAt(i);
        geheimtext = geheimtext + verschieben(naechstes,schluessel);
    }

    return geheimtext;
}

Schritt 3: Methode "entschluesseln" erstellen

Wieder bekommt die Methode einen Text als String und einen Schlüssel als Integer übergeben und soll einen String zurück geben, nämlich den entschlüsselten Text. Der Code für die Methode sieht also wie folgt aus:

/**
 * Entschlüsselt den Geheimtext mit dem angegebenen Schlüssel
 * @param geheimtext
 * @param schluessel
 * @return entschlüsselter Text
 */
public static String entschluesseln(String geheimtext, int schluessel){

}

Hier kann man die selbe Hilfsmethode wie vorher verwenden, man muss bloß bachten, dass die Verschiebung in die andere Richtung geht. Also muss man die Zahl hier anpassen zu:

verschieben(naechstesZeichen,26-schluessel)

Die ganze Methode sieht dann so aus:

public static String entschluesseln(String geheimtext, int schluessel){
    String entschluesselt = ""; //Zuerst noch leer
    geheimtext = geheimtext.toUpperCase(); //Alles in Großbuchstaben umwandeln
    for(int i=0; i<geheimtext.length(); i++){
        //Für jeden einzelnen Buchstaben: Verschieben und 
        //an entschlüsselten Text anhängen
        char naechstes = geheimtext.charAt(i);
        entschluesselt = entschluesselt + verschieben(naechstes, 26-schluessel);
    }

    return entschluesselt;
}

Zusammenfassend: Gesamter Code mit Test

In der Main-Methode kann ein kurzer Test geschrieben werden (ein richtiger J-Unit Test wäre natürlich besser!). Der gesamte Code sieht dann so aus:

package serlo;

public class CaesarVerschluesselung {

    public static void main(String[] args) {
        String klartext = "Juhu! Es funktioniert!";
        int schluessel = 3;

        String geheimtext = verschluesseln(klartext, schluessel);
        System.out.println("Text: " + klartext + " -> " + geheimtext);

        String entschluesselt = entschluesseln(geheimtext, schluessel);
        System.out.println("Geheimtext: " + geheimtext + " -> " + entschluesselt);
    }

    /**
     * Verschlüsselt den Klartext mit dem Schlüssel und gibt den Geheimtext zurück
     * @param klartext
     * @param schluessel
     * @return verschlüsselter text
     */
    public static String verschluesseln(String klartext, int schluessel){
        String geheimtext = ""; //Zuerst noch leer
        klartext = klartext.toUpperCase(); //Alles in Großbuchstaben umwandeln
        for(int i=0; i<klartext.length(); i++){
            //für alle einzelnen Buchstaben: Verschieben und an den Geheimtext anhengen
            char naechstes = klartext.charAt(i);
            geheimtext = geheimtext + verschieben(naechstes,schluessel);
        }

        return geheimtext;
    }

    /**
     * Verschiebt den Buchstaben um die angegebene Verschiebung, 
     * nach Z wird wieder bei A begonnen.
     * 
     * @param buchstabe
     * @param verschiebung
     * @return verschobener Buchstabe
     */
    public static char verschieben(char buchstabe, int verschiebung){
        //Buchstaben werden als Zahl gespeichert, 
        //das erlaubt einfache Verschiebung:
        if(buchstabe>='A' && buchstabe <='Z'){ //Sonderzeichen ausschließen
            buchstabe += verschiebung;
            while(buchstabe > 'Z'){
                buchstabe -= 26;
            }
        }

        return buchstabe;
    }
    /**
     * Entschlüsselt den Geheimtext mit dem angegebenen Schlüssel
     * @param geheimtext
     * @param schluessel
     * @return entschlüsselter Text
     */
    public static String entschluesseln(String geheimtext, int schluessel){
        String entschluesselt = ""; //Zuerst noch leer
        geheimtext = geheimtext.toUpperCase(); //Alles in Großbuchstaben umwandeln
        for(int i=0; i<geheimtext.length(); i++){
            //Für jeden einzelnen Buchstaben: Verschieben und 
            //an entschlüsselten Text anhängen
            char naechstes = geheimtext.charAt(i);
            entschluesselt = entschluesselt + verschieben(naechstes, 26-schluessel);
        }

        return entschluesselt;
    }
}