Base58

Encode and decode Base58 in the Bitcoin, Ripple or Flickr alphabets — the encoding built for strings humans have to read aloud.

Runs locally
Plain text
0 chars
Base58
0 chars

What is Base58?

Base58 is Base64 with the confusing characters removed. Satoshi Nakamoto designed it for Bitcoin addresses by dropping 0, O, I and l — which are easy to misread in most fonts — along with + and /, which break when a string is double-clicked or wrapped in a URL. The result is 58 characters that survive being written on paper, read over the phone, or selected with a double-click. It is meaningfully less efficient than Base64, roughly 37% overhead against 33%, and encoding requires big-integer arithmetic rather than simple bit-shifting. That trade is only worth it when a human has to handle the string.

How to use this tool

  1. 1 Pick Encode to convert text to Base58, or Decode to go the other way.
  2. 2 Choose the alphabet: Bitcoin/IPFS is the default and by far the most common.
  3. 3 Type or paste your input — conversion runs as you type.
  4. 4 Use the swap button to feed the output back in and confirm a clean round trip.

Frequently asked questions

Why does Base58 leave out 0, O, I and l?

Because they are visually ambiguous. In most sans-serif fonts capital O and zero look nearly identical, as do capital I and lowercase l. Bitcoin addresses get copied by hand and read aloud, so a single misread character meaning irrecoverable funds was a real risk. Removing four characters costs a little efficiency and eliminates the whole class of error.

What is the difference between Base58 and Base58Check?

Base58Check adds a version byte at the front and a four-byte checksum — the first four bytes of a double SHA-256 — at the end before encoding. That checksum is what lets a wallet reject a mistyped address instead of sending funds into the void. This tool does raw Base58; Base58Check is a layer on top of it.

Why does Base58 need BigInt?

58 is not a power of two, so there is no way to slice the input into fixed bit groups the way Base64 does with 6 bits per character. The whole input has to be treated as one enormous integer and repeatedly divided by 58, which makes encoding O(n²) and noticeably slower on large inputs.

How are leading zero bytes handled?

They carry no numeric weight, so they would vanish in the big-integer conversion. The spec handles this by counting leading zero bytes separately and emitting one leading alphabet-zero character for each. That is why Bitcoin addresses beginning with 1 round-trip correctly — this tool implements the same rule.

Which alphabet should I use?

Bitcoin/IPFS unless you have a specific reason otherwise — it is what Bitcoin, IPFS CIDs and most libraries mean by "Base58". Ripple uses a deliberately different ordering for its own addresses, and Flickr's variant puts lowercase before uppercase. The alphabets are not interchangeable: decoding with the wrong one gives silent garbage, not an error.