JavaScriptsVerschlüsselungen

Polybios-Quadrat

Ersetzt jeden Buchstaben durch seine Zeilen- und Spaltennummer in einem Fünf-mal-fünf-Quadrat — die Tabelle wird mit angezeigt.

Der griechische Geschichtsschreiber Polybios beschrieb im zweiten Jahrhundert vor Christus eine Tafel, mit der sich Nachrichten über weite Strecken übermitteln lassen. Die Buchstaben werden dazu in ein Quadrat aus fünf Zeilen und fünf Spalten einsortiert; jeder Buchstabe hat dann eine Zeilen- und eine Spaltennummer. Aus dem H in Zeile 2, Spalte 3 wird die Zahl 23.

Bei 25 Feldern und 26 Buchstaben muss einer weichen: Traditionell teilen sich I und J ein Feld, weil sie im Lateinischen ohnehin derselbe Buchstabe waren. Beim Entschlüsseln kommt deshalb immer ein I heraus, auch wenn ursprünglich ein J dastand — aus „Januar" wird „Ianuar". Das ist beim Lesen kein Problem und der Preis dafür, dass das Quadrat aufgeht.

Der eigentliche Zweck war nicht Geheimhaltung, sondern Übertragung: Polybios wollte Nachrichten mit Fackeln signalisieren. Zwei Gruppen von Fackeln, links die Zeile, rechts die Spalte, und schon ließ sich jeder Buchstabe über Kilometer weitergeben — ein optischer Telegraf, zweitausend Jahre vor der Elektrizität. Dieselbe Idee steckt in jedem Verfahren, das Zeichen auf ein kleineres Alphabet abbildet, etwa im Morsecode oder in der Bacon-Chiffre.

Als Verschlüsselung ist das Quadrat schwach, solange die Buchstaben in der normalen Reihenfolge stehen — dann ist es nur eine andere Schreibweise. Stärker wird es mit einem Schlüsselwort: Es wird vorn ins Quadrat geschrieben, der Rest des Alphabets folgt. Diese Möglichkeit bietet das Script unten an; das jeweils gültige Quadrat wird immer mit angezeigt. Wichtiger noch: Das Quadrat ist die Grundlage vieler späterer Verfahren — die Nihilisten-Chiffre und die im Ersten Weltkrieg eingesetzte ADFGVX-Chiffre bauen darauf auf, ebenso das Vigenère-Quadrat in der Grundidee.

Verschlüsselungen Baujahr 2026 läuft in deinem Browser

I und J teilen sich ein Feld. Umlaute werden zu ae, oe, ue, das ß zu ss.

Script von kostenlose-javascripts.de

So funktioniert das Script

Das Script besteht aus drei Bausteinen: Es baut das Alphabet für das Quadrat, bereitet den Text auf, und rechnet dann zwischen Buchstabe und Zahlenpaar hin und her. Der Trick, der alles einfach macht: Das Quadrat wird gar nicht als Tabelle gespeichert, sondern als eine einzige Zeichenkette aus 25 Buchstaben.

const platz = alphabet.indexOf(sauber.charAt(i));
paare.push((Math.floor(platz / 5) + 1) + "" + ((platz % 5) + 1));

Aus der Position in dieser Kette lassen sich Zeile und Spalte direkt ausrechnen. Math.floor(platz / 5) ist die ganzzahlige Division — sie sagt, in welchem Fünferblock die Position liegt, also die Zeile. platz % 5 ist der Rest, also die Spalte. Beides um 1 erhöht, weil Polybios bei 1 zu zählen begann und JavaScript bei 0. Das leere "" in der Mitte sorgt dafür, dass die beiden Zahlen aneinandergehängt und nicht addiert werden — sonst käme aus 2 und 3 die Zahl 5 statt „23".

klar += alphabet.charAt(zeile * 5 + spalte);

Der Rückweg ist dieselbe Rechnung andersherum: Zeile mal fünf plus Spalte ergibt wieder die Position in der Kette. Diese Umrechnung zwischen einem zweidimensionalen Raster und einer eindimensionalen Liste begegnet euch überall, wo Spielfelder oder Bilder im Speicher liegen — von Minesweeper bis zu jedem Foto.

const roh = (schluessel + "ABCDEFGHIKLMNOPQRSTUVWXYZ")…
for (let i = 0; i < roh.length; i++) {
  if (ergebnis.indexOf(roh.charAt(i)) === -1) {
    ergebnis += roh.charAt(i);
  }
}

So entsteht das Schlüsselwort-Quadrat. Erst werden Schlüsselwort und Alphabet einfach hintereinandergehängt, dann läuft eine Schleife darüber und übernimmt jeden Buchstaben nur beim ersten Auftreten. Aus dem Schlüsselwort „ALLGAEU" wird dabei „ALGEU", und der Rest des Alphabets füllt auf. Beachtet, dass im festen Alphabet oben das J fehlt — es wurde vorher überall durch I ersetzt, damit genau 25 Buchstaben übrig bleiben.

.replace(/Ä/g, "AE").replace(/Ö/g, "OE").replace(/Ü/g, "UE")
.replace(/ß/g, "SS").replace(/J/g, "I")
.replace(/[^A-Z]/g, "");

Die Textvorbereitung ist bei allen klassischen Verfahren dieselbe Fleißarbeit. Wichtig ist die Reihenfolge: Erst müssen die Umlaute in zwei Buchstaben aufgelöst werden, denn die letzte Zeile wirft alles weg, was nicht A bis Z ist — käme sie zuerst, verschwänden die Umlaute ersatzlos. Genau diese Reihenfolge ist eine typische Fehlerquelle, weil das Ergebnis auf den ersten Blick trotzdem plausibel aussieht.

Zum Anpassen: Ein 6×6-Quadrat mit 36 Feldern nimmt das vollständige Alphabet und die zehn Ziffern auf; dann muss J nicht mehr weichen. Dafür ersetzt ihr alle Fünfen im Code durch Sechsen, erweitert das Alphabet um „0123456789" und lasst in der Ziffernprüfung die 6 zu. Wollt ihr das Ergebnis wie beim Original ohne Leerzeichen, ersetzt paare.join(" ") durch paare.join("") — entschlüsseln lässt es sich trotzdem, weil jedes Paar genau zwei Ziffern hat.

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.

Mehr aus der Kategorie Verschlüsselungen