Base32 & Base58 Encoder
Encode text or hex bytes to Base32 (RFC 4648, base32hex, Crockford) or Base58 (Bitcoin alphabet) and decode back — checked against the RFC test vectors.
The encoded string with byte and character counts, or the decoded text/hex, with the exact offending character reported when a string is not valid in that alphabet.
Example: "foobar" → MZXW6YTBOI====== in Base32 (the RFC 4648 vector) and CPNMUOJ1E8====== in base32hex; hex 0000287fb4cd → 11233QC4 in Base58, leading zero bytes as leading 1s.
Five bits at a time,
or one big number.
How the two families differ, which alphabets are supported, and how the code is checked.
Base32
RFC 4648 §6 takes the bytes five bits at a time and writes each group as one of 32 characters (A–Z 2–7), padding the result with "=" to a multiple of eight characters; base32hex (§7) uses 0–9 A–V so encoded strings sort like the bytes; Crockford's variant drops I, L, O and U, allows hyphens and reads I/L as 1 and O as 0. Decoding is case-insensitive and ignores whitespace.
Base58
Base58 treats the whole byte string as one big number and rewrites it in base 58 with an alphabet that leaves out 0, O, I and l (the four look-alikes); leading zero bytes become leading "1"s so they survive the conversion. It is quadratic in the input length — fine for identifiers and keys, not for documents.
Verification
The encoder reproduces every RFC 4648 §10 test vector (f → MY======, foobar → MZXW6YTBOI======) and the Base58 reference vector (0000287fb4cd → 11233QC4) in the unit tests. Decoding reports the first character that is not in the alphabet. Nothing leaves the browser; the same four anonymous usage counts as the rest of the site apply.
SOURCES
- RFC 4648 — The Base16, Base32, and Base64 Data Encodings (IETF, 2006), §6 base32, §7 base32hex, §10 test vectors
- Base58 — the Bitcoin reference alphabet and leading-zero rule (public domain description)
Last reviewed 20 September 2026. How results are checked: How we verify.