User Rating 0.0
Total Usage 0 times
0 characters 0 bytes (UTF-8)
Is this tool helpful?

Your feedback helps us improve.

About

Base58 encoding maps arbitrary byte sequences onto an alphabet of 58 visually unambiguous characters, deliberately excluding 0 (zero), O (uppercase o), I (uppercase i), and l (lowercase L) to eliminate transcription errors in manual copying. The encoding converts a byte array into a base-58 numeral by treating the input as a single big-endian unsigned integer, then performing repeated division by 58. Each leading 0x00 byte maps to the character 1 (index zero), preserving information that pure numeric conversion would discard. A single misread character in a wallet address or API key can route funds irreversibly to a dead address or fail authentication silently.

This tool implements the full BigInt-based Base58 algorithm client-side with no server round-trips. It supports both the Bitcoin alphabet (123456789ABCDEFGHJKLMNPQRSTUVWXYZ abcdefghijkmnopqrstuvwxyz) and the Flickr variant (which swaps uppercase and lowercase). Note: this encoder operates on raw UTF-8 bytes. It does not append a Base58Check checksum. For checksum-protected encoding, a SHA-256 double-hash step is required separately.

base58 encode string encoder bitcoin base58 base58check text encoding developer tool

Formulas

The encoding converts a byte array B of length n into a big-endian unsigned integer, then extracts Base58 digits by modular arithmetic:

N = n1i=0 Bi 256n1i

Then repeatedly divide by 58:

digitk = N mod 58 , N N58

Digits are collected in reverse order. Each leading 0x00 byte in the original array prepends the character at alphabet index 0 (which is 1 in the Bitcoin alphabet).

Where: Bi = the i-th byte of the UTF-8 encoded input string. N = the integer representation of the full byte array. digitk = the k-th Base58 character (mapped via the alphabet lookup). The output length is approximately log58(256n) n × 1.3656.

Reference Data

IndexBitcoin CharFlickr CharIndexBitcoin CharFlickr Char
01129Ww
12230Xx
23331Yy
34432Zz
45533aA
56634bB
67735cC
78836dD
89937eE
9Aa38fF
10Bb39gG
11Cc40hH
12Dd41iJ
13Ee42jK
14Ff43kL
15Gg44mM
16Hh45nN
17Ji46oP
18Kj47pQ
19Lk48qR
20Mm49rS
21Nn50sT
22Po51tU
23Qp52uV
24Rq53vW
25Sr54wX
26Ts55xY
27Ut56yZ
28Vu57z0

Frequently Asked Questions

Base64 uses 64 characters including "+", "/", and "=" for padding. Base58 uses 58 characters, deliberately removing 0, O, I, l, +, and / to avoid visual ambiguity and URL-unsafe characters. Base58 output is roughly 37% longer than the raw binary input, compared to ~33% for Base64, but it is far safer for manual transcription. Base58 also has no padding characters.
When you convert a byte array to a single integer, leading 0x00 bytes are mathematically insignificant - they vanish. Bitcoin addresses and other protocols rely on exact byte-level fidelity. The algorithm counts leading 0x00 bytes before conversion and prepends one "1" character per zero byte to the final output. Without this step, decoding would yield a shorter byte array than the original.
Both alphabets contain the same 58 characters. The Bitcoin alphabet orders uppercase letters before lowercase (123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz). The Flickr alphabet reverses this, placing lowercase before uppercase (123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ). The numeric encoding is identical; only the character mapping differs.
No. Base58Check appends a 4-byte checksum (derived from a double SHA-256 hash of the payload with a version prefix) before Base58-encoding the result. This tool performs raw Base58 encoding without any checksum. If you need Base58Check (e.g., for Bitcoin addresses), you must compute the SHA-256 double-hash and append the first 4 bytes to your data before encoding.
This tool encodes the UTF-8 byte representation of the input text. If your input contains multibyte characters (e.g., emoji, CJK), the encoder correctly processes all UTF-8 bytes. For raw binary data (arbitrary hex), you would need to convert the hex string to a byte array first. The tool processes text as-is via the TextEncoder API.
The tool enforces a limit of 100,000 characters. For very large inputs, the BigInt arithmetic may take a few hundred milliseconds. Base58 encoding is inherently O(n²) for large inputs because each division step processes the entire number. For data exceeding a few kilobytes, consider chunked encoding or alternative formats like Base64.