JavaScript/Cäsar Chiffre
Der Cäsar Chiffre (auch als einfacher Cäsar, Verschiebungs- oder Shiftchiffre bekannt) ist eine monoalphabetische Form der Verschlüsselung, bei der das Alphabet um eine bestimmte Anzahl an Zeichen rotiert wird. Diese Anzahl bestimmt den Schlüssel. Der Schlüssel zur Substitution wird während der ganzen Chiffrierung nicht verändert. Es ist die einfachste Form einer Geheimschrift. Der Name Cäsar Chiffre rührt aus der historischen Verwendung dieses Chiffres durch Gaius Julius Cäsar zur verschlüsselten Kommunikation. Cäsar rotierte das Alphabet um 3 Buchstaben. (aus: Verschiebechiffre)
Umsetzung des Cäsar in JavaScript
Der Cäsarchiffre kann im Unterrichtsverlauf relativ früh besprochen werden. Es ist, wegen seines deutlichen Nutzens, ein motivierendes Beispiel für einfache Programmierübungen. Dabei kann von einfachen Verschlüsseln von Zahlen zu ganzen Sätzen die Komplexität erhöht werden. Sinnvoll ist eine Reflexion der Sicherheit (kaum sicher). Ebenfalls kann thematisiert werden, welche Algorithmen (bzw. Rechenarten) sich (uneingeschränkt) zur Verschlüselung eignen.
Voraussetzungen: Variablen, Datentypen Number und String, Ein- und Ausgabe, einfache Rechnungen, erster Kontakt mit if, erste Methoden von String
Variante 1: Nur Zahlen
<script>
'use strict';
// Cäsar Variante 1: Nur Zahlen
var klartext, geheimtext, schluessel;
schluessel = 3;
klartext = prompt ('Bitte geben Sie eine Zahl ein', 0);
geheimtext = Number(klartext) + schluessel;
document.write(klartext + ' wird zu ' + geheimtext);
</script>
- Analysieren Sie das das Programm und probieren Sie es aus.
- Ändern Sie das Programm so, dass der Benutzer auch den Schlüssel bestimmt.
- Überlegen Sie sich, ob man jede Rechenart zur Verschlüsselung nutzen kann (Multiplikation, Division, Wurzeln...). Was sind die Vor- und Nachteile?
Variante 2: Einzelne Buchstaben
<script>
'use strict';
// Cäsar Variante 2: Je ein Buchstabe
var klartext, geheimtext, schluessel,x;
schluessel = 3;
klartext = prompt ('Bitte geben Sie EINEN Buchstaben ein','');
x = klartext.charCodeAt(0) + schluessel;
geheimtext = String.fromCharCode(x);
document.write(klartext + ' wird zu ' + geheimtext);
</script>
Erläuterung: klartext.charCodeAt(0)
ergibt den Zahlenwert des Zeichens an Position 0 von Klartext nach der ASCII-Tabelle.
geheimtext = String.fromCharCode(x);
ist dann genau andersherum die Rückverwandlung der Zahl x
in den entsprechenden Buchstaben.
Nähere Infos zu den Zeichenkettenmethoden: JavaScript/Objekte/String
- Analysieren Sie das das Programm und probieren Sie es aus.
- Lassen den Benutzer 3 Buchstaben gleichzeitig eingeben, die dann alle umgewandelt werden.
- Warum ist es notwendig, Buchstaben in Zahlen und wieder zurück zu verwandeln? Ein Problem stellt sich z.B. beim Buchstaben "Z". Warum?
Variante 3: Einzelne Buchstaben mit sinnvollem Überlauf
<script>
'use strict';
// Cäsar Variante 3: Problemlösung "Overflow"
var klartext, geheimtext, schluessel,x;
schluessel = 3;
klartext = prompt ('Bitte geben Sie EINEN GROSSEN Buchst. ein','');
x = klartext.charCodeAt(0)
if (x < 65) document.write('Buchstabe ungültig!');
if (x >= 91) document.write('Buchstabe ungültig!');
x = x + schluessel;
if (x >= 91) x = x - 26;
geheimtext = String.fromCharCode(x);
document.write(klartext + ' wird zu ' + geheimtext);
</script>
Erläuterung:
if (bedingung) befehl;
führt den Befehl nur aus, wenn die Bedingung erfüllt ist.
Beachten Sie: wenn man auf Gleichheit prüfen möchte, muss man x == y
tippen (2 Gleichheitszeichen). Genaueres später.
if (x>=91) x = x – 26;
Erläutern Sie diese Zeile. Welchen Nutzen bringt sie?- Nehmen wir an, wir wählen als Schlüssel -3 (also 3 zurück im Alphabet). Ändern Sie das Programm so, dass es kein Problem mit dem „A“ gibt.
- Welche Besonderheit hat der Schlüssel 13?
Variante 4: Das gesamte Wort verschlüsseln
Es schließt sich die Frage nach der Verschlüsselung des gesamten Wortes an. Dies kann als Übung geschrieben werden, wenn die Schleife eingeführt ist. Recherchieren Sie dazu folgende Methoden des Objektes String: charAt(), length
Fortsetzung
- Kryptoanalyse: Entschlüsseln des Cäsars
- Ähnliches Projekt: Leonardos Spiegelschrift
- Ähnliches Projekt: Galgenmännchen (Austausch von geratenen Buchstaben in String)
Weblinks
- Mathe Prisma
- SELFHTML: CharCodeAt