Base58 Encoder / Decoder
Encode bytes to Base58 (the variant used in Bitcoin addresses and IPFS CIDs). Base58 omits the visually-confusing characters 0/O/I/l from the Base64 alphabet — a wallet address you have to type doesn't get misread.
How to use the Base58 Encoder / Decoder
Type to encode, or paste a Base58 string to decode. The alphabet used is the Bitcoin convention: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz — no 0, no O, no I, no l. Padding from a leading zero byte becomes a leading '1'.
Why Bitcoin uses Base58
Base58 encodes data with 58 symbols — the digits and letters of Base62 minus four that are easy to confuse: 0 (zero), O (capital o), I (capital i), and l (lower-case L). It also drops the + and / that base64 uses. The result is a string a person can copy, read, or even transcribe with far less risk of error, which matters when the value is a wallet address rather than machine-only data.
Unlike base64, Base58 is not a simple bit-regrouping; it treats the input as one big number and repeatedly divides by 58, so output length is not a neat multiple of the input. Leading zero bytes are encoded specially as leading 1 characters to preserve them. Bitcoin addresses and IPFS content identifiers are the best-known users of this scheme.
Common use cases
- Reading crypto identifiers — decode a Bitcoin-style address or IPFS CID to its underlying bytes.
- Typo-resistant codes — produce identifiers people copy by hand without confusing 0 and O.
- Compact tokens — encode bytes more tightly than hex while staying alphanumeric.
- Learning the encoding — see how big-number division differs from base64 bit-grouping.
- Debugging — check what a Base58 string decodes to when integrating a wallet or storage system.
Frequently asked questions
Which characters does Base58 leave out, and why?
0, O, I, and l because they look alike in many fonts, plus the + and / of base64. The aim is an alphabet a human can transcribe accurately.Why is Base58 output not a fixed multiple of the input length?
How are leading zero bytes handled?
1 (the first symbol in its alphabet). That keeps the byte count reversible.