JavaScripts › Verschlüsselungen
ROT13 Verschlüsselung
Verschiebt jeden Buchstaben um 13 Stellen im Alphabet — derselbe Knopf verschlüsselt und entschlüsselt.
ROT13 ist keine Verschlüsselung im ernsthaften Sinne, sondern eine Verschiebung: Jeder Buchstabe wird durch denjenigen ersetzt, der im Alphabet 13 Stellen weiter steht. Aus A wird N, aus B wird O, aus Z wird M. Es handelt sich damit um einen Sonderfall der Caesar-Verschiebung, bei der ein beliebiger fester Abstand gewählt wird — hier ist er auf 13 festgelegt.
Zum Ausprobieren tippt ihr euren Text in das Feld und klickt auf „Ver-/Entschlüsseln“. Der Text im Feld wird direkt ersetzt. Einen zweiten Knopf zum Zurückrechnen braucht es nicht: Weil das Alphabet 26 Buchstaben hat und 13 genau die Hälfte davon ist, landet man nach zweimaliger Anwendung wieder beim Ausgangstext. Ein zweiter Klick auf denselben Knopf stellt den Originaltext also wieder her.
Ziffern, Satzzeichen, Leerzeichen und Umlaute bleiben unverändert stehen — das Script fasst nur die 26 Buchstaben des lateinischen Grundalphabets an, dabei aber Groß- und Kleinschreibung getrennt, sodass die Form des Textes erhalten bleibt.
Bekannt geworden ist das Verfahren im Usenet, den Diskussionsforen der frühen Internetzeit: Dort wurden Pointen, Rätsellösungen und Spoiler in ROT13 gesetzt, damit niemand sie versehentlich mitliest. Wer den Text wirklich lesen wollte, ließ ihn durch die eingebaute ROT13-Funktion seines Nachrichtenprogramms laufen. Als Schutz vor neugierigen Blicken taugt das bis heute; als Schutz vor jemandem, der den Text wirklich lesen will, war es nie gedacht.
Nach demselben Muster arbeitet unser Atbash-Script, das das Alphabet nicht verschiebt, sondern spiegelt. Verfahren mit einem echten, selbst gewählten Schlüssel findet ihr beim Vigenere Quadrat und beim XcxxsV-Verschlüsselungsprogramm.
Ein zweiter Klick auf denselben Knopf stellt den Ausgangstext wieder her.
So funktioniert das Script
Das Script hat zwei Teile: eine Funktion, die einen Text Zeichen für Zeichen durchgeht und die Buchstaben verschiebt, und eine Zeile, die diese Funktion mit dem Knopf verbindet. Alles steckt in einer sofort ausgeführten Funktion, damit die Namen darin nicht mit anderen Scripts auf derselben Seite kollidieren.
const keycode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Diese Zeichenkette ist das Nachschlagewerk des Scripts. Die Stelle, an der ein Buchstabe darin steht, ist seine Nummer: A steht an Stelle 0, B an Stelle 1, Z an Stelle 25. Gezählt wird ab null, wie fast überall in der Programmierung.
let codechar = text.charAt(i);
let pos = keycode.indexOf(codechar.toUpperCase());
if (pos >= 0) {
charAt(i) holt das Zeichen an der Stelle i aus dem Text. Damit Groß- und Kleinbuchstaben gleich behandelt werden können, wird für das Nachschlagen mit toUpperCase() vorübergehend eine Großbuchstaben-Fassung gebildet. indexOf() liefert die Nummer des Buchstabens — oder -1, wenn das Zeichen im Alphabet gar nicht vorkommt. Genau das prüft die if-Abfrage: Nur wenn eine gültige Nummer herauskam, wird verschoben. Ziffern, Satzzeichen und Umlaute rutschen an dieser Stelle vorbei und bleiben unverändert.
pos = (pos + keycode.length / 2) % keycode.length;
Das ist die Verschiebung. keycode.length ist 26, die Hälfte davon 13 — die 13 steht also gar nicht wörtlich im Code, sondern ergibt sich aus der Länge des Alphabets. Das Rechenzeichen % liefert den Rest einer Division und macht aus dem Alphabet einen Ring: Wer über das Z hinausläuft, kommt vorn beim A wieder heraus. Für das P (Nummer 15) ergibt 15 + 13 = 28, und 28 geteilt durch 26 lässt den Rest 2 — also das C.
codechar = (codechar === codechar.toUpperCase())
? keycode.charAt(pos)
: keycode.charAt(pos).toLowerCase();
Jetzt wird der neue Buchstabe geholt. Der Ausdruck mit Fragezeichen und Doppelpunkt ist eine Kurzschreibweise für eine if-Abfrage: „Wenn die Bedingung stimmt, nimm den Wert vor dem Doppelpunkt, sonst den dahinter.“ Die Bedingung vergleicht das Originalzeichen mit seiner eigenen Großbuchstaben-Fassung — sind beide gleich, war es bereits ein Großbuchstabe, und der Ersatz bleibt groß. Andernfalls wird er mit toLowerCase() klein gemacht. So behält der Text seine ursprüngliche Groß- und Kleinschreibung.
textrot += codechar;
+= hängt das Zeichen an die bisher gesammelte Ausgabe an — verschoben, wenn es ein Buchstabe war, unverändert sonst. Nach dem letzten Durchlauf der Schleife steht der fertige Text in textrot und wird mit return zurückgegeben.
document.getElementById("rot13-knopf").addEventListener("click", function () {
feld.value = rot13(feld.value);
});
Der Knopf bekommt mit addEventListener seine Aufgabe: bei jedem Klick den Inhalt des Textfeldes durch die Funktion schicken und das Ergebnis wieder ins selbe Feld schreiben. Weil 13 genau die halbe Alphabetlänge ist, führt der zweite Klick zurück zum Ausgangstext — ein getrennter Entschlüsselungsknopf ist deshalb überflüssig. Das Script steht dabei unter dem Formular, damit Textfeld und Knopf schon existieren, wenn es ausgeführt wird.
Zum Anpassen: Ersetzt ihr keycode.length / 2 durch eine andere Zahl, bekommt ihr eine beliebige Caesar-Verschiebung — allerdings braucht ihr dann zum Entschlüsseln eine zweite Fassung, die dieselbe Zahl wieder abzieht. Nur bei der 13 fallen Ver- und Entschlüsseln zusammen.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.