Text, der mehrere Kodierer durchlaufen hat, ist der Normalfall, nicht der Ausnahmefall: ein JSON-Körper in einem Base64-Token, eine URL in einer Logzeile, ein Formularwert, der prozentkodiert und danach Base64-kodiert wurde, damit er in einem Header reisen kann. Diese Seite entpackt diese Schichten einzeln, benennt bei jedem Schritt die verwendete Technik, gibt aus, wie sicher sie sich ist und warum, und listet die Techniken auf, die sie an diesem Schritt verworfen hat, damit Sie ihr widersprechen können. Die Seite hört auf, wenn der Text nicht mehr kodiert aussieht, wenn das Schrittlimit erreicht ist oder wenn der nächste Schritt wieder Text zurückbringen würde, den sie bereits gesehen hat. Nichts wird stillschweigend geraten: Eine Technik, deren Alphabet sich mit gewöhnlichen Wörtern überschneidet, wird nie allein angewendet, sondern nur angeboten. Die gesamte Verarbeitung erfolgt lokal in Ihrem Browser — Ihre Daten werden nie auf einen Server hochgeladen.
Neu hier?Kodierungsketten einfach erklärt — was eine Schicht ist, warum Kodierung keine Verschlüsselung ist und warum die Reihenfolge der Schritte zählt.
Eine Schicht allein nur anwenden, wenn die Sicherheit mindestens beträgt:
Anhalten nach
Führt das Schichtlimit oben in einem Zug aus. Die gleiche Tabelle wird so oder so aufgebaut, sodass Sie an jeder Stelle zum schrittweisen Vorgehen wechseln können.
Oder wählen Sie eine Technik von Hand:
Diese Liste ist das, was die Seite im Text jetzt sehen kann. Die Rotationschiffren sind immer darin, weil sie gar nicht erkennbar sind; ebenso alles, was erst erkennbar wird, wenn der Leerraum aus einem umbrochenen Text entfernt wurde. Das ist entsprechend markiert und wird nie allein angewendet.
Kodierter Text
Diese Eingabe ist länger, als diese Seite ohne Nachfrage laufen lässt, und die Schätzung oben besagt, dass es dauern kann. Klicken Sie erneut auf Die gesamte Kette entpacken, um trotzdem fortzufahren, oder kürzen Sie den Text zuerst.
Was die Seite im Text jetzt sieht
(zuerst etwas eingeben oder einfügen)
(die Kette erscheint hier)
Schichten, in der Reihenfolge, in der sie abgenommen wurden
#
Technik
Sicherheit
Eingabe → Ergebnis
Größe
Warum genau diese
Pro Schicht
Kopieren übernimmt den Text, wie er nach dieser Schicht stand. Zurückrollen verwirft diese Schicht und alle darüberliegenden; so machen Sie mehr als einen Schritt auf einmal rückgängig.
Ergebnis nach0Schicht(en)(noch nichts)
Was ist eine Kodierungskette, und warum braucht sie einen eigenen Dekodierer?
Eine Schicht ist ein Kodierer, der auf Text angewendet wurde. Eine Kette sind zwei oder mehr davon, nacheinander angewendet. Fast jedes alltägliche Beispiel sieht so aus: Jemand muss ein Stück Binärdaten — ein Bild, ein signiertes Token — an einen Ort bringen, der nur Text trägt, also kodiert er es mit Base64. Dieses Base64-Ergebnis muss dann in einer URL reisen, also wird es prozentkodiert. Diese ganze URL landet dann in einer Logzeile oder einer Konfigurationsdatei, sodass auch die Backslashes oder Anführungszeichen escaped werden. Was Sie vor sich sehen, wenn Sie auf das Problem stoßen, ist die äußerste Schicht, und sie ist unlesbar aus dem einfachen Grund, dass die inneren Schichten noch darauf liegen.
Einzelzweck-Dekodierer helfen dabei nicht. Ein Base64-Dekodierer, dem JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC übergeben wird, liefert eine völlig korrekte Antwort, die trotzdem unlesbar ist, weil die Prozent-Escapes und die Zeichenreferenzen noch über dem Text liegen, den Sie wollten. Was Sie wirklich brauchen, ist etwas, das bei jedem Schritt entscheidet, welchen Kodierer man abnimmt — und diese Seite ist diese Entscheidung, sichtbar gemacht.
Kodierung ist keine Verschlüsselung, und diese Seite bricht nichts auf. Jede Technik auf dieser Seite ist eine öffentliche, umkehrbare Art, dieselbe Information niederzuschreiben. Base64 hat keinen Schlüssel. Prozent-Escaping hat keinen Schlüssel. Ist die innerste Schicht verschlüsselt, dekodiert diese Seite die äußeren Schichten und gibt Ihnen Chiffretext zurück, den sie deutlich benennt, statt ihn als Ergebnis auszugeben. Hier gibt es nichts auszuführen und nichts zu verbergen.
Die durchgerechneten Beispiele auf dieser Seite
Jede Zeile unten ist eine echte Eingabe aus der Datendatei dieser Seite, und die mittlere Spalte ist das, was der eigene Entpacker der Seite darin findet. Die letzte Spalte ist der Text, der übrig bleibt, wenn er anhält.
Was die Eingabe ist
Gefundene Schichten
Eingabe, zitiert wie angekommen
Übrig, wenn angehalten
Diese Zeilen werden von der Seite aus ihrer eigenen Fallliste gerendert und bei jedem Besuch neu ausgeführt, sodass sie nicht von dem abweichen können, was der Code tatsächlich tut. Der Selbsttest unten prüft jede davon.
Wie die Seite entscheidet, welche Schicht sie abnimmt
Auf die Form achten, nicht auf die Bedeutung. Jede Technik hat eine Signatur — ein Prozent-Escape, eine gerade Anzahl Hexziffern, ein Alphabet und eine Länge, die zu Base64 passen. Die Seite listet jede Technik auf, deren Signatur zum Text passt, mit einer Sicherheit zwischen 0 und 1.
Dekodieren, dann prüfen, ob das Ergebnis Text ist. Eine Technik lohnt sich nur anzuwenden, wenn sie etwas Lesbares erzeugt. Jeder Kandidat wird tatsächlich ausgeführt, und seine Ausgabe wird danach bewertet, wie viele druckbare Zeichen sie enthält.
Nur anwenden, was die Schwelle erreicht, in der Reihenfolge der Sicherheit. Der Kandidat mit der höchsten Sicherheit oberhalb Ihrer Schwelle wird angewendet, und der Vorgang wiederholt sich mit dem Ergebnis. Unterhalb der Schwelle werden Techniken aufgelistet, aber nicht angewendet.
Eine Regel, die diese Seite zusätzlich einführt. Selbst wenn eine Technik die Schwelle erreicht, wendet diese Seite sie nicht allein an, es sei denn, das Ergebnis ist tatsächlich lesbarer Text — Ersatzzeichen und Steuerzeichen zählen dagegen. Ohne diese Regel würde das gewöhnliche Wort cafe als drei Bytes gültig dekodiert, die nur in Latin-1 druckbar sind, und getUserName als acht Bytes Rauschen. Der Detektor hat recht, dass diese Zeichenketten ins Alphabet passen; diese Seite entscheidet, dass das Passen ins Alphabet nicht genügt. Sie können sie weiterhin von Hand anwenden, und die Kandidatenliste sagt Ihnen, dass sie abgelehnt wurde und warum.
Bewusst anhalten. Wenn keine Technik die Schwelle erreicht, wenn sich der Text nicht mehr ändert, wenn das Schrittlimit erreicht ist oder wenn der nächste Schritt bereits in dieser Kette erschienenen Text zurückbrächte. Der letzte Fall ist wichtig: ROT13 ist seine eigene Umkehrung, daher würde eine Kette, die diesen Schritt zweimal nehmen darf, nie enden.
Ein umbrochener Text wird angeboten, nie angewendet. Ist der Text über mehrere Zeilen verteilt, sieht der Detektor Leerraum, liest gewöhnliche Prosa und findet nichts. Deshalb entfernt die Seite den Leerraum aus einer Kopie des Textes, fragt den Detektor erneut und bietet, was sie findet, als Schritt zur Auswahl von Hand an. Leerraum aus Ihrem Text zu entfernen ist eine Umschreibung Ihres Textes, und diese Seite schreibt nichts um, was Sie nicht ausdrücklich verlangt haben.
Was diese Seite nicht tut
Es dekodiert, und sonst nichts. Der Text, den Sie einfügen, wird nie ausgeführt: kein eval, kein new Function, keine Skriptinjektion, kein Öffnen eines Dokuments. Er wird nie irgendwohin gesendet: kein Upload, keine Anfrage, keine Analyse. Außer dem Werbeplatz am Seitenende und der Zeile mit den Teilen-Schaltflächen (das sind die einzigen zwei Drittanbieter-Widgets, die diese Seite lädt) wird keine Schrift und kein Skript von einem anderen Host geladen. Dekodierte Ausgabe wird als Text in die Seite geschrieben, sodass ein HTML-Tag, das aus einer Schicht herauskommt, als Tag angezeigt und nicht in eines verwandelt wird. Sie können all das überprüfen: Drücken Sie Selbsttest, und die Seite prüft ihren eigenen Quelltext auf jedes dieser Konstrukte und schlägt fehl, wenn sie eines findet.
Was sie erkennen kann und was nicht
Technik
Wie sicher, für sich genommen
Der Haken
Auf dieser Seite zitierter Text ist für diese Website geschrieben. Die Alphabete von Base64, Base32, Base58, Base91 und Quoted-Printable sowie das Blockformat uuencode sind die veröffentlichten; die Dekodierung folgt diesen Definitionen und nicht irgendwelchen Eigenheiten eines bestimmten Werkzeugs. Referenzvektoren für die Alphabete stehen auf den verwandten Seiten, die die RFC-4648-Testvektoren enthalten.
Text, der über mehrere Zeilen umbrochen ist
Ein Blob, der durch eine E-Mail-Nachricht, eine PEM-Datei, ein Token in einem Header oder einen aus dem Terminal kopierten Hash gegangen ist, ist meist umbrochen: Der Kodierer hat ihn an einer festen Spalte gebrochen — 76 Zeichen ist die MIME-Konvention — und an der Stelle, an der die Spalte endete, einen Zeilenumbruch eingefügt. Diese Zeilenumbrüche gehören nicht zu den Daten. Sie existieren, damit eine lange Zeile den Transport übersteht, und jeder Dekodierer, der einen solchen Blob liest, soll sie ignorieren.
Diese Seite ignoriert sie nicht von sich aus, und der Grund ist die Regel, die sie überall sonst anwendet. Leerraum ist das stärkste einzelne Zeichen dafür, dass eine Zeichenkette Prosa statt Daten ist, und genau dieser Test verhindert, dass The quick brown fox jumps over the lazy dog. überhaupt als etwas gelesen wird. Ein umbrochener Blob sieht für diesen Test genau wie Prosa aus, also findet die Seite darin nichts — und leistet dann die ehrliche Hälfte der Arbeit: Sie berechnet, was sie finden würde, wenn der Leerraum entfernt wäre, listet das im Handauswahl-Menü mit der Markierung Leerraum zuerst entfernen auf und hält dort an. Es wird aufgelistet statt angewendet, weil das Entfernen von Leerraum Ihren Text verändert, und diese Seite verändert Text nur, wenn sie beweisen kann, was die Änderung ist. Hier kann sie beweisen, was die Änderung ist, und unterlässt sie Ihnen trotzdem, weil ein Text mit einem Zeilenumbruch mitten in einem Wert und ein Text mit einem Zeilenumbruch zwischen zwei Feldern von innen gleich aussehen.
Die zwei Schritte, wenn die Seite bei umbrochenem Text stoppt. Wechseln Sie zu Von Hand schrittweise, drücken Sie einmal Nächste Schicht anwenden (dadurch erhält die Seite eine Kette, an die sie anhängen kann, und es ändert sich nichts), wählen Sie dann den Eintrag mit der Markierung Leerraum zuerst entfernen und drücken Sie Anwenden. Die Zeile, die dabei herauskommt, nennt die Anzahl der entfernten Leerzeichen und gibt ihre Eingabegröße als den eingefügten Text an; der Unterschied zwischen den beiden Zahlen in dieser Zeile ist also genau der Leerraum, der entfernt wurde.
Dieselbe Überlegung gilt für die Fälle in die andere Richtung. Ein uuencodierter Block trägt in jeder Zeile eine begin-Zeile und ein Längenzeichen, ist also schon in seiner Form erkennbar und wird allein angewendet; ein Quoted-Printable-Körper behält seine eigenen weichen Zeilenumbrüche und wird von seinem eigenen Dekodierer dekodiert, der weiß, dass ein einzelnes abschließendes = am Zeilenende eine Fortsetzung und keine Daten ist. Wo ein Formtest nicht zwischen Prosa und Daten unterscheiden kann, lehnt die Seite ab und zeigt Ihnen die Alternative, statt für Sie zu wählen.
Was diese Seite ausführt und was sie ablehnt
Die Tabelle unten wird aus denselben Konstanten gebaut, die die Seite erzwingt, sodass eine Zeile und eine Warnung auf dieser Seite nicht voneinander abweichen können. Die beiden Werte, die Menschen überraschen, sind die Zeilen für Base58 und Base62: Diese beiden Techniken werden durch schriftliche Division umgerechnet, deren Aufwand mit dem Quadrat der Länge wächst. Deshalb führt diese Seite sie nur auf einer kurzen Zeichenkette aus und sagt das im Schritt, statt als würde sie hängen.
Die Schätzungen sind bewusst pessimistisch. Sie stammen aus einem Zeitmessgerät und nicht aus Ihrem Rechner, und ein Desktop-Browser ist meist um ein Vielfaches schneller als der angezeigte Wert.
🔷 Kodierungswerkzeuge
Entpackt Text, der mehr als einmal kodiert wurde, Schicht für Schicht.