Base58 is a binary-to-text encoding introduced by Bitcoin to represent addresses and keys in a form that humans can copy without errors. It uses 58 symbols, deliberately dropping the four characters that look alike in many fonts. This tool encodes UTF-8 text to Bitcoin Base58 and decodes it back, entirely in your browser.
How it works
Unlike Base64, Base58 does not work on fixed bit groups. It treats the entire input as one large integer and repeatedly divides by 58:
- The input bytes are interpreted as a big-endian number.
- That number is divided by 58 over and over; each remainder selects one symbol from the alphabet
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. - The symbols come out least-significant first, so they are reversed for the final string.
- Each leading zero byte in the input is encoded separately as a leading
1, because the numeric conversion alone would lose it.
Decoding runs the same process in reverse: characters are accumulated into a big integer, the integer is rendered back into bytes, and each leading 1 is restored as a zero byte.
Worked example and notes
Encoding the text Hello World! produces a compact Base58 string. Because Base58 omits 0, O, I, and l, a string that contains any of those characters is invalid and the decoder will reject it with the offending character named clearly.
Base58 versus other compact encodings
| Encoding | Characters | Avoids look-alikes | URL-safe | Use case |
|---|---|---|---|---|
| Base64 | A–Z, a–z, 0–9, +/ | No | No (needs URL-safe variant) | General binary-to-text |
| URL-safe Base64 | A–Z, a–z, 0–9, -_ | No | Yes | Tokens, JWTs |
| Base58 (Bitcoin) | 1–9, A–H, J–N, P–Z, a–k, m–z | Yes | Yes | Addresses, keys |
| Base58 (Ripple) | Different ordering of same 58 chars | Yes | Yes | XRP addresses |
| Base62 | 0–9, A–Z, a–z | No | Yes | Short IDs, URLs |
Base58 trades the simplicity of bit-grouping (as Base64 uses) for a human-readable, unambiguous output. The big-integer division approach means encoding and decoding are slightly slower than Base64 for large inputs, but for the short values Base58 is designed for — keys, addresses, identifiers — the difference is imperceptible.
Base58 vs Base58Check
A real Bitcoin address is not raw Base58. It is Base58Check: the version-prefixed payload is hashed with SHA-256 twice, the first four bytes of that double-hash are appended as a checksum, and the whole thing is then Base58-encoded. If you mistype one character of a real Bitcoin address, the checksum fails and the wallet rejects it rather than sending funds to the wrong place.
This tool encodes raw Base58 without a checksum — it is the underlying primitive. If you need Base58Check encoding with a four-byte double-SHA-256 guard, see the Ripple Base58 tool, which exposes the checksum layer explicitly.
Remember that this tool treats your input as UTF-8 text. Bitcoin tooling typically treats inputs as raw hex byte sequences. If you are building wallet-layer software, feed the raw bytes (as hex) rather than a text string to get a result that matches what a Bitcoin library would produce.