Base58 Encoder/Decoder
Encode text to Base58 or decode Base58 strings back to plain text using the Bitcoin alphabet (UTF-8 aware). Handles leading zero bytes and validates Base58 characters automatically.
Input
Output
Guides
Base58 is a binary-to-text encoding scheme popularized by Bitcoin that represents arbitrary bytes using 58 alphanumeric characters — the full set of digits and letters minus 0 (zero), O (capital O), I (capital I), and l (lowercase L). Those four characters are dropped specifically because they look alike in many fonts, so a Base58 string can be read, typed, and copied by hand with much less risk of a mistyped or misread character than Base64 or plain hexadecimal. Unlike Base64, Base58 also avoids punctuation like +, /, and =, so the output is always a single unbroken alphanumeric token — convenient for URLs, filenames, and command-line arguments.
What it's used for
- Bitcoin and other cryptocurrency addresses — Bitcoin wallet addresses, private keys (WIF format), and many altcoin addresses are Base58-encoded (with an additional checksum step known as Base58Check) so users can transcribe them without ambiguity.
- IPFS content identifiers — legacy IPFS CIDs (v0) are Base58-encoded multihashes, making file hashes shareable as short, unambiguous strings.
- Short URL and ID generators — services that mint compact, human-friendly, case-sensitive identifiers (short links, invite codes) often choose Base58 for the same readability guarantees that made it popular in Bitcoin.
- QR codes and printed materials — anywhere a string might be read aloud, handwritten, or OCR'd, Base58's ambiguity-free alphabet reduces transcription errors compared to Base64.
How to use this tool
- Paste text into the input box.
- Choose Encode to convert plain text to Base58, or Decode to convert a Base58 string back to text.
- The result appears in the output box automatically — no button click needed. Use the copy or download icon to grab it.
Encoding accepts any UTF-8 text (the text is UTF-8 encoded before being Base58-encoded, so emoji and non-Latin scripts round-trip correctly). The conversion treats the input bytes as one large number and repeatedly divides it by 58, so it works correctly at any length — there's no practical size limit imposed by the algorithm itself. Leading zero bytes are a special case: each 0x00 byte at the start of the input becomes a leading 1 character in the output (and is restored as a 0x00 byte on decode), since a leading zero carries no numeric weight and would otherwise be lost. Decoding expects a string made up only of valid Base58 characters; if the input contains 0, O, I, l, or any other character outside the Base58 alphabet, or if the decoded bytes aren't valid UTF-8 text, the tool reports a clear error instead of producing garbage output.
FAQ
Why is my Base58 output longer than the original text? Base58 needs roughly 1.37 output characters for every input byte, since log(256)/log(58) ≈ 1.37 — slightly less efficient than Base64's ~1.33 ratio, but still far more compact than encoding bytes as decimal or binary digits.
Is this the same alphabet Bitcoin uses?
Yes — this tool uses the standard Bitcoin Base58 alphabet (123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz). Note this tool performs plain Base58 encoding/decoding of text; it does not add the extra version byte and SHA-256d checksum that Base58Check uses for real Bitcoin addresses.
Why can't I use the letter "0" or "O" in decode input?
Those characters — along with I and l — are deliberately excluded from the Base58 alphabet because they're easy to confuse with each other or with 1/o in many fonts. If your input contains them, decoding fails with a descriptive error rather than silently producing wrong output.
Is Base58 encryption? No — Base58 is not encryption or compression. It's purely a representation format; anyone can decode it back to the original data instantly. Don't use it to protect sensitive information.
Privacy
All encoding and decoding happens entirely in your browser — your text never leaves your device or gets sent to a server.