Files & pages

Multi-Layer Decoder

Runs locallyNew

Use Multi-Layer Decoder

What it does

Paste encoded or obfuscated text and the decoder peels one layer after another, showing each step, until readable text or a known file format remains. Everything runs in your browser.

It runs entirely in your browser: nothing you enter is uploaded.

Example

URL-encoded Base64 of gzip

Input
H4sIAAAAAAACA7MpTi7KLCixK8%2FMS8kv18vJT04syczP08soSk1TsFVQyigpKSi20tdPrUjMLchJ1UvOz9UvSy3KTKu0L04tLgYqtTVPM05UsrbRh5oEACvqcc1SAAAA
Output (captured 2026-10-20)
3 layers: URL percent-encoding → Base64 → gzip

No further encoding recognised.

1
URL percent-encoding
1 escape · 130 → 128 bytes
H4sIAAAAAAACA7MpTi7KLCixK8/MS8kv18vJT04syczP08soSk1TsFVQyigpKSi20tdPrUjMLchJ1UvOz9UvSy3KTKu0L04tLgYqtTVPM05UsrbRh5oEACvqcc1SAAAA
2
Base64
decodes to gzip · 128 → 96 bytes
00000000  1f 8b 08 00 00 00 00 00  02 03 b3 29 4e 2e ca 2c  |...........)N..,|
00000010  28 b1 2b cf cc 4b c9 2f  d7 cb c9 4f 4e 2c c9 cc  |(.+..K./...ON,..|
00000020  cf d3 cb 28 4a 4d 53 b0  55 50 ca 28 29 29 28 b6  |...(JMS.UP.())(.|
… 48 more bytes
3
gzip
96 → 82 bytes
<script>window.location.href = "hxxps://example[.]com/verify?session=7f3a";</script>
Result

Text, 82 bytes.

<script>window.location.href = "hxxps://example[.]com/verify?session=7f3a";</script>

Indicators in the result (1)
URL
hxxps://example[.]com/verify?session=7f3a
Copy indicators (raw)

Three layers: URL percent-encoding (%2F), Base64 that decodes to gzip data, and gzip itself, ending in a script that sends the browser to https://example.com/verify.

FAQ

Which encodings does it recognise?

Base64 (standard and URL-safe, padding optional), hex in plain, 0x, \x, spaced or colon-separated form, URL percent-encoding, HTML entities, \x, \u, \u{…} and %u escapes, String.fromCharCode lists, quoted-printable, gzip, zlib and raw deflate, and UTF-16LE text such as a PowerShell -EncodedCommand. Calls like atob('…') or base64_decode('…') and data: URIs are unwrapped as well.

Why did it stop, or leave my text as it is?

A layer is only accepted when its output is readable text, a known file format or a stream that decompresses cleanly, so ordinary words that happen to be valid Base64 are left alone. Short or unusual encodings can therefore be missed: use Decode as to apply a method by hand and Undo to step back. It stops after 12 layers.

Is the decoded content run or sent anywhere?

No. Decoding uses plain JavaScript and the browser's DecompressionStream; the result is shown as text or as a hex dump and is never executed, rendered or uploaded.