100% offline
Developer
Free · no signup
Updated

Base58 Encoder / Decoder

A Base58 Encoder / Decoder converts binary data to and from a 58-character alphabet that omits 0, O, I and l to prevent misreading, treating the input as one big integer rather than packing bits — and verifies the four-byte Base58Check checksum used by Bitcoin addresses.

The standard alphabet. Omits 0, O, I and l so nothing can be misread, which is the entire reason Base58 exists.

About Base58 Encoder / Decoder

Base58 exists because Bitcoin addresses get copied by hand. Removing zero, capital O, capital I and lowercase l eliminates every character pair that people and OCR reliably confuse. Because 58 is not a power of two, the encoding is not bit-packing: the whole input is read as one big-endian integer and repeatedly divided, which has a consequence that trips up most implementations. Leading zero bytes carry no numeric weight, so they vanish unless encoded separately as leading '1' characters — and a Bitcoin P2PKH address begins with a 0x00 version byte, so getting this wrong corrupts precisely the values that matter. This tool handles it, works on real bytes rather than round-tripping through a string, and supports the Bitcoin, Ripple and Flickr alphabets. Turn on Base58Check and it appends or verifies the four-byte double-SHA-256 checksum, tells you whether that checksum is valid, and names the version byte — so a mistyped address is reported as a bad checksum rather than as plausible-looking garbage.

What Base58 Encoder / Decoder does

  • Bitcoin/IPFS, Ripple and Flickr alphabets
  • Base58Check: appends or verifies the 4-byte double-SHA-256 checksum
  • Says whether a checksum is valid, and what it should have been
  • Names the version byte — P2PKH, P2SH, WIF key, testnet, xpub/xprv
  • Handles leading zero bytes correctly, which most implementations drop
  • Input and output as text, hex bytes or Base64
  • Rejects 0, O, I and l with a hint about the character you probably meant

When to reach for Base58 Encoder / Decoder

  • Checking whether a Bitcoin address was copied correctly before sending to it
  • Pulling the version byte and hash out of a P2PKH or P2SH address
  • Inspecting an IPFS CIDv0 hash
  • Decoding a WIF private key or a BIP-32 extended key prefix
  • Encoding a short identifier that survives being copied by hand

How to use Base58 Encoder / Decoder

  1. 01

    Paste the value

    Enter a Base58 string to decode, or text or hex bytes to encode.

  2. 02

    Turn on Base58Check for addresses

    Bitcoin addresses, WIF keys and extended keys are all Base58Check. With it on, the checksum is verified and the version byte named.

  3. 03

    Choose the alphabet

    Bitcoin is the default and also covers IPFS. Switch to Ripple for XRP addresses, which start with 'r'.

  4. 04

    Read the result

    Switch the output to hex to see raw bytes. Any checksum failure is called out explicitly.

When to use Base58 Encoder / Decoder vs alternatives

AlternativeUse Base58 Encoder / Decoder when…Use the alternative when…
A blockchain explorer's address lookupyou only want to know whether the string is well-formed, and you would rather not tell a third party which address you are about to transact with.you need on-chain balance or transaction history, which requires network access by definition.
A Python or JS snippet in a REPLyou want the checksum verified and the version byte named without writing the double-SHA-256 step yourself.it is part of a larger script.
Asking an AI chatbotalways, for this one — Base58 is big-integer division and a language model cannot do it reliably. It will produce something that looks like an answer.you want the format explained rather than a value decoded.

Frequently asked questions

What is the difference between Base58 and Base58Check?
Base58Check is Base58 with a four-byte integrity check appended before encoding — the first four bytes of SHA-256(SHA-256(payload)). That is what lets software reject a mistyped Bitcoin address instead of sending funds into the void. Plain Base58 has no such protection, so any typo just decodes to different bytes. Addresses, WIF private keys and BIP-32 extended keys are all Base58Check.
Why does Base58 exclude 0, O, I and l?
Because those four characters are the ones humans and OCR confuse: zero against capital O, capital I against lowercase l. Base58 was designed for values that get copied by hand, read off a screen or photographed, so removing the ambiguous glyphs matters more than the small loss in density. It also omits '+' and '/', which makes the output safe to double-click as a single word.
Why do some Base58 decoders lose the leading bytes?
Because Base58 is big-integer arithmetic, not bit-packing, and a leading zero byte adds nothing to the integer's value — so a naive implementation drops it. The specification handles this by encoding each leading zero byte as a separate '1' character. It matters constantly: a Bitcoin P2PKH address starts with a 0x00 version byte, which is exactly why those addresses begin with '1'.
Can I check whether a Bitcoin address is valid?
You can check that it is well-formed, which is what this tool does: the string decodes under the Base58 alphabet, and the four-byte checksum matches the payload. That catches typos and truncation. What it cannot tell you — because it would need network access — is whether the address has ever been used or holds a balance.
What is the version byte?
The first byte of the decoded payload, identifying what kind of value it is. 0x00 is a Bitcoin mainnet P2PKH address (so it renders starting with 1), 0x05 is P2SH (starting with 3), 0x80 is a WIF private key, and 0x6f is a testnet address. BIP-32 extended keys use a four-byte version instead — 0488b21e for xpub, 0488ade4 for xprv. The tool names whichever it recognises.
Is it safe to paste a private key here?
The page makes no network requests and the decoding happens in your tab, so nothing is transmitted. That said, the general rule stands: a live private key should not be pasted into any web page, ours included, because the risk is your own machine and browser extensions rather than the page. For anything holding real funds, use offline tooling.

Related concepts