JavaScripts › Verschlüsselungen
Atbash
Dreht das Alphabet um: Aus A wird Z, aus B wird Y. Ein zweiter Klick stellt den Originaltext wieder her.
Atbash ist eines der ältesten bekannten Geheimschriftverfahren und denkbar einfach: Das Alphabet wird umgedreht. Aus einem A wird ein Z, aus einem B ein Y, aus einem C ein X — und so weiter bis zum Z, aus dem wieder ein A wird. Dieses JavaScript, das unser User Vollautomatisch eingeschickt hat, erledigt diese Ersetzung für einen beliebigen Text.
Zum Ausprobieren tippt ihr euren Text in das Feld und klickt auf „Atbash anwenden“. Der Text im Feld wird dabei direkt ersetzt. Weil das Verfahren sich selbst umkehrt, holt ihr euch mit einem zweiten Klick auf denselben Knopf den Originaltext zurück — es gibt bei Atbash gar kein getrenntes Ver- und Entschlüsseln, es ist beides dieselbe Rechnung. Groß- und Kleinschreibung bleiben erhalten; Ziffern, Satzzeichen, Leerzeichen und Umlaute lässt das Script unverändert stehen.
Der Name stammt aus dem Hebräischen und ist selbst schon die Anleitung: Er setzt sich aus den Buchstaben Aleph, Taw, Beth und Schin zusammen — dem ersten und letzten, dann dem zweiten und vorletzten Buchstaben des hebräischen Alphabets. Das Verfahren ist in hebräischen Texten der Antike belegt und damit deutlich älter als die nach Caesar benannte Verschiebechiffre.
Weil immer derselbe Buchstabe durch denselben anderen ersetzt wird, ist die Sicherheit gleich null: Ein Blick auf die Häufigkeit der Buchstaben genügt, und wer das Verfahren kennt, braucht ohnehin keinen Schlüssel. Um einen Text auf den ersten Blick unleserlich zu machen — etwa die Auflösung eines Rätsels oder eine Pointe, die niemand vorzeitig lesen soll — reicht es aber allemal. Ähnlich funktioniert die ROT13 Verschlüsselung, die das Alphabet nicht spiegelt, sondern um 13 Stellen verschiebt. Wer einen echten Schlüssel verwenden möchte, findet den 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 besteht aus zwei Teilen: einer Funktion, die einen Text Zeichen für Zeichen umschreibt, und einer Zeile, die diese Funktion mit dem Knopf verbindet. Beides steckt in einer sofort ausgeführten Funktion, damit die Namen darin nicht mit anderen Scripts auf der Seite kollidieren.
const alphabet = "abcdefghijklmnopqrstuvwxyz";
Das ganze Verfahren hängt an dieser einen Zeichenkette. Sie dient als Nachschlagewerk: 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 in JavaScript wie fast überall in der Programmierung ab null.
const buchstabe = text.charAt(i);
const position = alphabet.indexOf(buchstabe);
const positionKlein = alphabet.indexOf(buchstabe.toLowerCase());
Die Schleife läuft über jedes Zeichen des Textes. charAt(i) holt das Zeichen an der Stelle i, indexOf() sucht es im Alphabet und liefert seine Nummer — oder -1, wenn es dort nicht vorkommt. Das Script schlägt zweimal nach: einmal mit dem Zeichen, wie es dasteht, und einmal in Kleinschreibung. Aus dem Vergleich der beiden Ergebnisse liest es ab, worum es sich handelt: Sind beide Nummern gültig, war es ein Kleinbuchstabe. Ist nur die zweite gültig, war es ein Großbuchstabe. Ist keine gültig, war es weder das eine noch das andere — eine Ziffer, ein Satzzeichen, ein Umlaut.
ausgabe += alphabet.charAt(alphabet.length - position - 1);
Das ist die eigentliche Spiegelung. alphabet.length ist 26; für das a mit der Nummer 0 ergibt die Rechnung 26 − 0 − 1 = 25, und an Stelle 25 steht das z. Für das b (Nummer 1) kommt 24 heraus, also das y. Das -1 am Ende ist nötig, weil die letzte Stelle einer Zeichenkette der Länge 26 die Nummer 25 trägt. += hängt das gefundene Zeichen an die bisher gesammelte Ausgabe an.
ausgabe += alphabet.charAt(alphabet.length - positionKlein - 1).toUpperCase();
Für Großbuchstaben wird dieselbe Rechnung mit der kleingeschriebenen Nummer angestellt — das Alphabet enthält ja nur Kleinbuchstaben — und das Ergebnis anschließend mit toUpperCase() wieder groß gemacht. So bleibt die Groß- und Kleinschreibung des Ausgangstextes erhalten.
} else {
ausgabe += buchstabe;
}
Alles, was kein Buchstabe von a bis z ist, wird unverändert übernommen. Deshalb bleiben Leerzeichen, Satzzeichen und Ziffern stehen — und aus demselben Grund bleiben leider auch die deutschen Umlaute unangetastet, sie kommen im lateinischen Grundalphabet nicht vor.
document.getElementById("atbash-knopf").addEventListener("click", function () {
feld.value = atbash(feld.value);
});
Der Knopf bekommt mit addEventListener eine Aufgabe: Bei jedem Klick den Inhalt des Textfeldes durch die Funktion schicken und das Ergebnis wieder ins selbe Feld schreiben. Genau daher rührt der hübsche Effekt, dass ein zweiter Klick den Originaltext zurückbringt — die Spiegelung des Alphabets ist ihre eigene Umkehrung. Das Script steht dabei unter dem Formular, damit Textfeld und Knopf schon existieren, wenn es ausgeführt wird.
Zum Anpassen: Wer die Ausgabe lieber in einem zweiten Feld hätte, ersetzt das feld.value = vor dem Funktionsaufruf durch das Zielfeld. Und wer statt der Spiegelung eine Verschiebung möchte, ändert die Rechnung in der Klammer — (position + 13) % 26 ergibt zum Beispiel ROT13.
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.