JavaScript packen und entpacken

Packen schreibt JavaScript in den Wrapper eval(function(p,a,c,k,e,d){…}(…)) des klassischen Base62-Packers um: jedes Wort wird durch einen Index in ein Wörterbuch der sortierten eindeutigen Wörter ersetzt, und die Nutzlast behält den Quelltext, wobei Anführungszeichen, Backslashes und Zeilenumbrüche escapt werden. Entpacken wertet eine solche Nutzlast in dieser Seite aus und zeigt das erzeugte JavaScript.

Das ist Verschleierung, keine Verschlüsselung, und beim Entpacken wird der eingefügte Code ausgeführt — also nur Skripte verwenden, denen Sie vertrauen. Beide Schaltflächen arbeiten nur mit dem Text im Feld, es wird nichts hochgeladen und die Seite sendet beim Packen und Entpacken keine Anfrage.

  1. Fügen Sie das JavaScript oben ein — oder eine gepackte Nutzlast eval(function(p,a,c,k,e,d){…}), wenn Sie sie zurücklesen wollen.
  2. Klicken Sie auf JavaScript packen. Das Ergebnisfeld zeigt den einzeiligen Wrapper mit der gepackten Nutzlast und dem Wörterbuch in der Argumentliste.
  3. Übernehmen Sie den Wrapper mit der Schaltfläche Kopieren, oder leeren Sie mit Leeren beide Felder.
  4. Für den umgekehrten Weg eine gepackte Nutzlast einfügen und auf JavaScript entpacken klicken. Die Seite wertet sie aus und zeigt den zurückgegebenen Quelltext.
  5. Enthält die Eingabe kein eval, lässt sie sich nicht auswerten oder liefert keinen Text, erscheint ein Hinweis mit dem Grund statt eines leeren Ergebnisses.

Was die beiden Schaltflächen tun

Der Wrapper, den der Packer schreibt

Jedes Wort (Buchstaben, Ziffern, Unterstrich und $) wird durch einen Base-62-Index ersetzt (0-9, dann a-z, dann A-Z), und die eindeutigen Wörter wandern sortiert in das Wörterbuch, das mit der Nutzlast reist. Die Nutzlast ist ein einfach quotierter String, daher werden Anführungszeichen, Backslashes und Zeilenumbrüche escapt statt gelöscht: ein //-Kommentar bleibt Kommentar, und eine Anweisung ohne Semikolon behält ihren Zeilenumbruch.

Das Ergebnis ist normales JavaScript: in eine Seite eingefügt läuft es, und jeder Unpacker, der den Wrapper auswertet, liefert den Originalcode zurück. In diesem Stand wurde der Rundlauf byteweise geprüft — mit escapten Anführungszeichen, regulären Ausdrücken mit Backslashes, Template-Literalen, Blockkommentaren, Dateien ohne Semikolon, CJK-Text, $-Bezeichnern, JSON-Text und Wörterbüchern mit über 60 Wörtern.

Eine Nutzlast zurücklesen

Entpacken akzeptiert jede Nutzlast, die sich zu einem String auswerten lässt, auch Packungen desselben Wrappers von anderen Seiten. Das Ergebnisfeld ist schreibgeschützt und syntaxhervorgehoben, die Kopierschaltfläche kopiert den Text.

Beim Entpacken wird die Eingabe in dieser Seite ausgewertet — genau dafür ist der eval()-Wrapper da — also nur Code entpacken, dem Sie vertrauen. Wirft die Nutzlast einen Fehler oder liefert sie keinen JavaScript-Text, erscheint eine Meldung statt eines leeren Felds.

Gemessene Größen und Zeiten

Packen zieht den Code auf eine Zeile und verkleinert wiederholten Code meist: 2,7 KB Handler-Funktionen wurden zu 1,8 KB, 16,7 KB zu 11 KB und 85 KB zu 55 KB, mit 1 bis 5 ms fürs Packen und 0,3 bis 3 ms fürs Entpacken in Chrome.

Da der Wrapper konstruktionsbedingt umkehrbar ist, ist das Ergebnis Verschleierung gegen beiläufiges Lesen — kein Schutz für ein Geheimnis: jeder kann es hier oder in einem anderen Unpacker einfügen und den Quelltext zurückholen.

Zuletzt verwendet: