ForHosting KIT · Developer Utilities

Base58 encoder & decoder

“Hello World” becomes JxF12TrwUP45BMd in Base58, using the Bitcoin alphabet of 58 characters without zero, capital O, capital I or lowercase l, so codes stay readable on paper and on screen. It decodes back, too. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Text
Hello World
Calculation mode
Encode
You get
Result
JxF12TrwUP45BMd
Input
Hello World
Base58
JxF12TrwUP45BMd
Alphabet name
bitcoin

A Base58 encoder turns ordinary UTF-8 text into a compact string that uses only fifty-eight unambiguous characters, and a Base58 decoder reverses that mapping so you get the original text back. This tool uses the Bitcoin alphabet: digits and letters without zero, capital O, capital I, or lowercase L, the four glyphs that humans most often confuse when reading handwritten notes, QR printouts, or wallet addresses. Developers check address-like strings, teachers demonstrate alternative radices, and scripts need deterministic round-trips without installing a crypto library.

What Bitcoin Base58 is and why those four characters are missing

Base58 is a binary-to-text encoding that maps an arbitrary byte sequence onto a fifty-eight-symbol alphabet. Unlike Base64, it drops characters that are hard to tell apart in print and speech: the digit zero, the capital letter O, the capital letter I, and the lowercase letter L. The Bitcoin project popularized one concrete ordering of the remaining symbols—one through nine, then A–Z without I and O, then a–z without l—and that ordering is what wallets, many blockchain explorers, and this capability use.

Encoding walks the input bytes as a big-endian integer in base two hundred fifty-six, repeatedly divides by fifty-eight, and maps each remainder to the alphabet; leading zero bytes become leading ones in the output, the same convention Bitcoin addresses follow. Decoding reverses the map: each character becomes a digit zero through fifty-seven, the big integer is rebuilt, and the byte array is recovered with the same leading-one rule.

Because the alphabet has no padding character, length alone does not imply a fixed block size the way Base64 does; round-trips still work as long as both sides agree on the alphabet and the leading-zero convention. When a character outside the alphabet appears—zero, O, I, l, punctuation, or whitespace—the decoder must fail loudly.

Human-safe short codes for print and QR

Encode short labels so printed codes avoid 0/O/I/l confusion when staff type them from paper or phone cameras.

Teaching alternative radices and Bitcoin alphabet

Classrooms and workshops encode Hello World, inspect the alphabet, then force invalid characters to show strict validation.

What alphabet does this Base58 encoder use?

The Bitcoin alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. It excludes 0, O, I, and l.

Is Base58 the same as Base64?

No. Base64 uses sixty-four symbols including +, /, and padding =, and it keeps 0 and O. Base58 is shorter on ambiguous glyphs and is common in Bitcoin-style strings.

Does this validate full Bitcoin addresses?

No. It only encodes and decodes raw UTF-8 text under the Bitcoin Base58 alphabet. It does not check version bytes or double-SHA256 checksums.

Is the Base58 encoder free?

The browser tool is free and runs locally.

Why is my Base58 string rejected when I decode it?

Because it contains a character outside the Bitcoin alphabet, such as zero, capital O, capital I, lowercase l, punctuation or a space. The decoder stops with a clear message instead of quietly turning it into different text.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/enc/base58

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/enc/base58 \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello World"}'
{
  "text": "Hello World"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "enc.base58",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

max_chars100000
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Choose encode to convert plain text into Base58, or decode to recover UTF-8 from a Base58 payload; invalid alphabet characters return a clear invalid_input error instead of silent corruption.

What Bitcoin Base58 is and why those four characters are missing

Silent substitution would invent a different payload and is worse than a hard error for wallets, checksums, and automated tests. This landing targets people searching for a Base58 encoder, Base58 decoder, or Bitcoin alphabet converter online; it is not Base64, not Base32, and not a full Bitcoin address validator with version bytes and checksums.

How to call the API and what the response contains

The default mode is encode: UTF-8 bytes of text become a Base58 string under the Bitcoin alphabet. Send a JSON body with a required string field text (aliases input, value, and data) and an optional mode that is either encode or decode. Mode decode treats text as a Base58 payload and returns the recovered UTF-8 string. Input length is capped at one hundred thousand characters so a single request cannot exhaust Worker memory on pathological big-integer expansion. On success for encode, the response includes mode, input, result and base58 with the same encoded string, alphabet with the full fifty-eight-character constant, alphabet_name set to bitcoin, input_bytes as the UTF-8 byte count, output_length as the encoded character count, and a short English message. On success for decode, the response includes mode, input, result and text with the decoded UTF-8 string, the same alphabet fields, input_length, output_bytes, and a matching message. Failed validation—missing text, non-string text, oversize input, an unknown mode, an invalid Base58 character, or decoded bytes that are not valid UTF-8—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price.

Practical tips, limits, and how this differs from Base64

Round-trip checks are the fastest smoke test: encode a known phrase such as Hello World, confirm the classic result JxF12TrwUP45BMd, then decode that string and confirm you recover the original phrase byte-for-byte. Prefer Base58 when human transcription safety matters more than density; prefer Base64 when you need maximum bits per character and machine-only transport. When teaching, show the same sentence encoded under Base58 and Base64 side by side so learners see why the Bitcoin alphabet looks different and why copy-paste errors drop when the four ambiguous glyphs are gone. Deliberately include a forbidden character—digit zero, capital O, capital I, or lowercase L—in a decode request to assert that your client handles invalid_input and the error message that names the index and the excluded glyphs. Keep payloads under the published character limit; extremely long strings expand as big integers and are better split or handled offline. This tool is not a Bitcoin address parser: it does not strip a version prefix, recompute a double-SHA256 checksum, or classify mainnet versus testnet. It is also not Base64 or Base64URL—those alphabets include plus, slash, and equals padding, and they keep zero and capital O. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when you fuzz invalid alphabet characters.

Wallet and fixture round-trips in tests

Generate known Base58 strings from fixture text and assert decode recovers the same UTF-8 bytes in CI without a crypto dependency.

What happens if I decode a string containing 0, O, I, or l?

The API returns invalid_input, names the bad character and its index, and reminds you that Bitcoin Base58 excludes those four glyphs. Failed tasks are not charged.

Read the full KIT documentation →