🔣 Base32 & Base58 Encoder/Decoder
Encode text to Base32 or Base58, or decode a Base32/Base58 string back to text. Base58 uses the Bitcoin alphabet (no 0, O, I or l).
How each alphabet is built
Both start from the UTF-8 bytes of your text. Base32 (RFC 4648) cuts the bit stream
into 5-bit groups, maps each to A-Z or 2-7, and pads with
= up to a multiple of eight characters. Base58 treats the bytes as one
large number and divides it repeatedly by 58, using the Bitcoin alphabet - digits and
letters minus 0, O, I and l.
"Hi" = bytes 0x48 0x69 = 0100100001101001
Base32: 01001 00001 10100 1[0000] -> J B U Q -> "JBUQ===="
Base58: 0x4869 = 18537 = 5x58^2 + 29x58 + 35 -> "6Wc"
So Base32 is a flat 60% expansion, eight characters per five bytes, while Base58 averages about 1.37 characters per byte.
Using the switches
- Base32 decoding is lenient. Trailing
=is stripped and the input upper-cased first, sojbuq====andJBUQboth decode. Base58 is case-sensitive and names the bad character:Invalid Base58 character: "0". - Decoding always returns text. The bytes pass through a strict UTF-8 decoder, so anything that is not valid text is refused outright instead of coming back as mojibake.
Frequently asked questions
Why does Base32 output end in equals signs?
Five bytes make exactly eight characters, so a shorter final block is zero-filled
and the string padded back up to a multiple of eight. Two bytes give four characters
and four pad signs: JBUQ====.
What is the difference between Base58 and Base64?
Base64 is denser - four characters per three bytes - but includes +,
/, 0, O, I and l,
which need escaping in URLs and are easy to misread. Base58 drops those six, which
is why Bitcoin uses it. This tool follows the Bitcoin ordering, not Ripple's.
Can I decode a Bitcoin address with this?
Not usefully. The Base58 step accepts it, but the bytes beneath are a version byte, a 20-byte hash and a checksum, so the UTF-8 stage rejects them. There is no Base58Check verification here either.