AZ Tools

Base58 Encoder / Decoder (Bitcoin, IPFS)

Developer

Base58 is a binary-to-text encoding that drops the visually ambiguous characters 0 (zero), O (capital o), I (capital i) and l (lowercase L), plus + and / — so the result is compact and safe to copy by hand or put in a URL. It's the encoding behind Bitcoin addresses and WIF keys, IPFS CIDv0 hashes, and Solana keys. Paste UTF-8 text or raw hex and encode to Base58, or paste a Base58 string and decode it back to text or hex. Leading zero bytes map to leading '1' characters exactly as the Bitcoin reference implementation does, so binary payloads round-trip byte-for-byte. Choose the Bitcoin/IPFS alphabet (the common one), Ripple's reordered alphabet, or Flickr's short-URL alphabet. Everything runs locally — nothing is uploaded.

Output

Plain Base58 (not Base58Check). A string only decodes with the same alphabet it was encoded in.

How to use

  1. Pick Encode or Decode.
  2. Choose the alphabet (Bitcoin is the default and most common) and whether your data is UTF-8 text or hex bytes.
  3. Type or paste into the input box and copy the result.

Frequently asked questions

Is this Base58Check?
No. This is plain Base58 — it does not add or verify the 4-byte double-SHA-256 checksum that Base58Check uses for Bitcoin addresses and WIF keys. Use it for raw Base58 payloads; if you need Base58Check, you must append/validate the checksum separately.
Why does Base58 drop some characters?
The alphabet omits 0, O, I and l because they're easily confused in many fonts, and + and / because they're not URL-safe. That's what makes a Base58 string safe to read aloud, transcribe, or paste into a URL without escaping.
What's the difference between the alphabets?
Bitcoin/IPFS uses '123...ABC...abc' order and is by far the most common. Ripple reorders the same 58 characters (so the same bytes give a different string). Flickr swaps the case ordering for short URLs. A string only decodes correctly with the alphabet it was encoded in.
How are leading zero bytes handled?
Each leading 0x00 byte becomes one leading '1' (the first alphabet character), matching the Bitcoin reference. That's why a 0x00000000 input encodes to '1111' and decodes back to four zero bytes — binary data survives a round trip exactly.

Related tools