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.