Base58 encoder and decoder (Bitcoin alphabet)
Base58 encodes binary data using 58 characters, deliberately leaving out the visually ambiguous 0, O, I and l. This makes encoded values safer to read, copy and type by hand, which is why it underpins Bitcoin addresses, WIF private keys and other crypto identifiers.
Why those four characters were removed
The design decision behind Base58 is straightforward: when a human being needs to type or visually verify a long encoded string, certain character pairs are nearly indistinguishable in most fonts. The digit 0 and the capital letter O look identical in many typefaces. Capital I and lowercase l are similarly confusing. A single transcription error in a Bitcoin address or private key would send funds to an unrecoverable destination.
Removing these four characters — and keeping 58 — prevents that entire class of error. The tradeoff is that Base58 produces slightly longer encoded strings than Base64 (which uses all 64 printable characters), but the human-safety benefit is worth it in contexts where people copy values by hand.
How it works
To encode, the tool converts your text to UTF-8 bytes and treats the whole byte array as a single large number. It repeatedly divides that number by 58, collecting each remainder, and maps the remainders to the alphabet 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. Any leading zero bytes in the input are emitted as leading 1 characters. Decoding reverses the process — multiplying by 58 and adding each digit’s value — to rebuild the original bytes, then decoding them as UTF-8.
Unlike Base32 or Base64, Base58 is not block-based. It works on the entire input as one large integer, so there are no alignment requirements and no padding characters.
Worked example
Encoding the text Gera:
Gera→ bytes47 65 72 61→2prCMN
| Input | Base58 |
|---|---|
Hi | 6Wc |
Gera | 2prCMN |
Notice that the output is shorter than the input in characters — Base58 compresses moderately for short ASCII inputs but the ratio varies with the byte content.
Base58 vs. Base58Check — an important distinction
This tool performs plain Base58 encoding and decoding. In practice, Bitcoin and many other protocols use Base58Check, which adds a version byte before the payload and appends a 4-byte checksum (derived from a double SHA-256 hash) after it. The checksum allows software to detect typos: if even one character in a Base58Check-encoded address is wrong, the decoded checksum will not match and the address is rejected.
If you are working with actual Bitcoin addresses or WIF private keys, those are Base58Check encoded, not plain Base58. This tool will encode and decode the raw Base58 layer but does not add or verify the checksum. Use a dedicated Bitcoin address tool if you need full Base58Check handling.
Where Base58 appears beyond Bitcoin
- IPFS content identifiers (CIDs) — older CIDv0 identifiers use Base58 to encode multihash digests.
- Solana keypairs and addresses — Solana uses Base58 (with the Bitcoin alphabet) for wallet addresses and encoded keys.
- Flickr short URLs — Flickr’s URL shortener uses a variant of Base58 to encode photo IDs.
Everything runs locally in your browser — no data is transmitted.