🔣 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

The encoding runs in this page's own JavaScript; nothing you paste is uploaded. Neither format is encryption - both reverse in one step.

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.