← Blog
// CRIPTO · CTF

Encoding is not encryption: recognizing and chaining decodings

Published Aug 11, 2026 · 7 min read
CriptoCTFEncodingBase64

You hit a weird string —in a CTF, a log, a suspicious macro— and many people's first reaction is "it's encrypted, nothing to do without the key". That's almost always false: it isn't encrypted, it's encoded, and that reverses with no key at all. Telling the two apart is one of the first things separating whoever solves the challenge from whoever gets stuck.

Three concepts people mix up

⚠️ The confusion has a real cost: treating Base64 as "encrypted" blocks you, and treating a hash as "encoding" wastes your time hunting for a "decode" button that doesn't exist.

Recognize the encoding by its shape

You don't need to guess: each encoding has a visual fingerprint.

SGVsbG8=            → Base64  → "Hello"
48656c6c6f          → Hex     → "Hello"
%3Cscript%3E        → URL     → "<script>"
Uryyb               → ROT13   → "Hello"

The CTF trick: they're nested

It's rarely a single layer. The classic is Base64 inside hex inside ROT… The strategy is mechanical: decode one layer, look at the result and ask "is this readable text or a new known shape?". If it's another shape, repeat. If it's noise, maybe it's no longer encoding but encryption (see below).

🔄 To avoid peeling layers by hand, the Multi Decoder (CTF) tries Base64, Hex, ROT13, base32 and more in a chain until meaningful text shows up; and for the simple case, the Base64 encoder. All in your browser, nothing is uploaded.

What if it really is encrypted?

If after peeling every encoding layer you still see noise, there's probably encryption. In CTFs the usual suspect is XOR with a short or repeating key: you attack it with analysis (key length, frequencies, known-plaintext like FLAG{). At that point "decode" no longer works: it's cryptanalysis. But half the "crypto" challenges fall before you get here, the moment you realize it was just Base64 wearing a hat.

Not just for CTFs

This is real triage: malware obfuscates its payloads with Base64/hex/XOR to dodge a quick read and some AVs. Recognizing the shape speeds up analysis — that's why the Cron Analyzer flags base64 -d | sh and the curl | sh pattern as alarms: they're the "inline" version of this same game.

Checklist

"It's encrypted" is the excuse; "it's Base64 three times over" is the reality, more often than you'd think. Learn to read the shape and you'll stop asking for a key that was never needed.

Share: LinkedIn X
Sergio Belmonte Morales
Sergio Belmonte Morales
Cybersecurity Analyst · SOC · Sentinel/KQL specialist