Base64 Is Not Encryption: Encoding vs Security
Because Base64 output looks like random gibberish, it gets misused as a way to "hide" data — in configs, cookies, and even stored credentials. This is one of the most common security misconceptions in software. Here's why Base64 protects nothing, and what to reach for instead.
This is a supporting guide in the Encoding vs Encryption vs Hashing cluster.
Why it looks secure (but isn't)
Base64 turns bytes into a limited alphabet of letters, digits, +, and /. The result is unreadable to a human, which feels like protection. But there is no key and no secret involved — the transformation is a fixed, public algorithm. Anyone can reverse it instantly:
"password123" -> Base64 -> "cGFzc3dvcmQxMjM="
"cGFzc3dvcmQxMjM=" -> decode -> "password123"
No password, no tooling beyond a decoder that ships in every browser and language. Base64 is obfuscation at best — and obfuscation an attacker undoes in one step is not security.
The tell: could you decode it yourself?
Ask a simple question: could you recover the original with no secret? With Base64 the answer is always yes — so an attacker can too. Real encryption fails that test: without the key, the ciphertext stays unreadable.
What Base64 is actually for
Base64 has a legitimate and important job — making binary data survive text-only channels: embedding an image in CSS as a data URI, putting bytes in a JSON field, or carrying a signature in a JWT. Use it for transport and compatibility, never for confidentiality. See What Is Base64 Encoding? for the full picture.
What to use when you need real protection
- Keep data secret → encryption (e.g. AES for data at rest, TLS/HTTPS in transit). Only someone with the key can read it.
- Store passwords → a salted, slow hash (bcrypt, scrypt, Argon2). You verify a login by hashing the attempt, never by decoding anything.
- Prove data wasn't tampered with → a hash or signature.
For the difference between these, see MD5, SHA-1 & SHA-256: Hashing Explained and the pillar, Encoding vs Encryption vs Hashing.
A word on JWTs
A standard JSON Web Token is Base64url-encoded and signed, not encrypted. The signature proves it wasn't altered, but the payload is readable by anyone who has the token — so never put secrets in a JWT payload. See How to Decode a JWT.
Try it
Paste anything into the Base64 Encoder/Decoder and decode it back in one click — the clearest demonstration that Base64 keeps no secrets. Everything runs in your browser.