How to use the Base32 decoder
- Paste the encoded string into Base32 to decode. Spaces, line breaks and hyphens between groups are ignored.
- Leave Alphabet on Base32 (A–Z, 2–7), or pick Base32hex (0–9, A–V) if the string contains digits 0, 1, 8 or 9.
- Read the Decoded text. If the bytes are not text, you get them as hex with a short warning.
- If something is wrong, the message names the bad character and its position, so you can fix a typo.
What it does and when to use it
Use this tool when you have a Base32 value and want to know what is inside it. Typical cases are checking a value from a config file, reading an ID from a URL, or confirming that a two-factor secret was copied correctly. Authenticator secrets are random bytes, so they usually come out as hex rather than words; that is expected.
The decoder is forgiving about formatting, because people often receive Base32 split into groups such as JBSW Y3DP or written in lower case. It is strict about the characters themselves, because a wrong character silently changes the bytes.
To go the other way, use the Base32 encoder. For other formats, try the Base64 decoder or Base58, which is common in cryptocurrency addresses. To look at binary output byte by byte, paste the hex into the hex dump viewer.
How it works
The decoder follows RFC 4648, sections 6 (Base32) and 7 (Base32hex).
- Spaces, line breaks and hyphens are removed, trailing = signs are dropped, and the text is upper-cased.
- Each character is looked up in the chosen alphabet to give a 5-bit value. An unknown character stops the decode with its position.
- The 5-bit values are joined into a bit stream and read back 8 bits at a time as bytes.
- Some lengths can never come from whole bytes. A string whose length leaves 1, 3 or 6 characters over in the last group of 8 is rejected.
- The bytes are shown as UTF-8 text if they are valid, otherwise as hex.
Decoding runs in your browser; nothing is sent to a server.
Worked examples
jbswy3dp → Hello
CPNMUOJ1E8====== (Base32hex) → foobar
MZXW6YTB01 → “0” at position 9 is not in the Base32 alphabet (A–Z, 2–7).
74====== → The decoded 1 bytes are not valid UTF-8 text, so they are shown as hex.
ff
The first line shows that lower case is fine. The second is an RFC 4648 test vector in the hex alphabet. In the third, someone typed digits where Base32 has none, and the tool points at the first one. The last decodes to the single byte 0xFF, which is not text.
Limits and tips
- Decoded text is read as UTF-8. Bytes in another character set appear as hex.
- The result is not checked against any checksum, because Base32 has none. A single wrong letter gives a different but valid-looking output.
- Very common mix-ups when typing keys by hand: O for 0, I or L for 1, and B for 8. Only the letters are valid in standard Base32.
Frequently asked questions
Does the decoder care about upper or lower case?
Why does my key say "0 is not in the Base32 alphabet"?
Do I need the = signs at the end?
Why do I see hex instead of text?
Is decoding Base32 the same as decrypting it?
Sources
- RFC 4648: The Base16, Base32, and Base64 Data Encodings — IETF / RFC Editor, accessed 2026-10-08
How do we know nothing is uploaded? Test it yourself on the privacy proof page.