Projekt 1 : "Geheime Nachrichten" (Teil 3)

2. Die Cäsar-Verschlüsselung

Bei der Cäsar-Verschlüsselung wird jeder Buchstabe durch eine festgelegte Anzahl von Stellen (die Geheim-Zahl im Alphabet verschoben. Wenn der Empfänger der verschlüsselten Nachricht diese Anzahl kennt, kann er den Text durch verschieben in die Gegenrichtung wieder leserlich machen.

Ein erster (etwas naiver) Ansatz zur Programmierung dieses Verfahrens könnte sein, einfach einen festen Wert auf den ASCII-Code jedes Zeichens aufzuschlagen wie im folgenden  Code gezeigt.  


#include <iostream>
#include <string>
using namespace std;

int main()
{
    string output, input = "!AByz~";
    int caesar = 5; // Geheime Code-Zahl 

    int cnt = 0;
    while(cnt<input.size())
    {
        // Buchstabe zu Zahl umwandeln
        int ascii = (int)input[cnt]; 

        // Zahl um festen Wert verschieben
        int new_ascii = ascii + caesar;

        // Zahl zu Buchstabe rückwandeln
        char code = (char)new_ascii; 

        // Neuen Buchstaben an Ergebnis anhängen
        output.push_back(code); 

        cnt++; 
    }
    cout << "Nachricht: " << output << endl;

    return 0;
}

Für die Buchstaben ist auch ohne ASCII-Tabelle zu erkennen, dass die Verschiebung um ein Zeichen im Alphabet funktioniert hat. Allerdings sind am Ende der Ausgabe merkwürdige Werte zu erkennen, die nicht aus einem, sondern aus mehreren Zeichen bestehen.

Der Grund hierfür ist, dass das letzte druckbare Zeichen "!" den ASCII-Code 126 hat und eine Verschiebung um den Wert 5 dazu führt, dass der maximal zulässige Zahlenwert von 127 in der ASCII-Tabelle überschritten wird, da 126+5=131 ergibt. Wir müssen also im nächsten Beispiel noch ein wenig an unserem Code weiterarbeiten, um dieses Problem zu lösen.