Base58 to Text Converter
Convert Base58 encoded strings to readable text and encode text to Base58. Uses Bitcoin's Base58 alphabet with real BigInt arithmetic.
About
Base58 encoding represents binary data using a 58-character alphabet that deliberately excludes visually ambiguous characters: 0 (zero), O (uppercase o), I (uppercase i), and l (lowercase L). Satoshi Nakamoto adopted this scheme for Bitcoin addresses precisely because a single misread character in a wallet address means irreversible fund loss. The encoding operates on raw bytes, not individual characters. A string of n bytes is treated as a single large integer, then decomposed into base-58 digits through repeated division. This tool implements that exact arithmetic using native BigInt, not a simulation or lookup shortcut.
Misapplying Base58 is common. Feeding Base64 input into a Base58 decoder produces garbage or errors because the alphabets differ: Base64 includes +, /, 0, O, I, l, none of which exist in Base58. This converter validates input strictly against the canonical Bitcoin Base58 alphabet before attempting decode. Note: this tool handles raw Base58, not Base58Check (which appends a 4-byte checksum). If you need checksum verification for cryptocurrency addresses, the trailing bytes must be validated separately against a double-SHA-256 hash.
Formulas
Base58 encoding treats the input byte sequence as a single unsigned integer N and converts it to base 58 using repeated division.
Encoding: given bytes B = [b0, b1, ā¦, bnā1], compute the integer:
N = nā1āi=0 bi ā 256nā1āi
Then extract Base58 digits by repeated modular division:
dk = N mod 58, N = N58
Digits are collected least-significant first, then reversed. Each leading zero byte (0x00) in the input maps to a leading 1 character (value 0 in the alphabet).
Where bi = individual byte value (0 - 255), N = big integer representation of the byte array, dk = the k-th Base58 digit (0 - 57), and the alphabet maps each digit to its character: 0 ā 1, 1 ā 2, ā¦, 57 ā z.
Decoding reverses this: each Base58 character is mapped back to its numeric value, the values are accumulated into N via N = N Ć 58 + dk, then N is decomposed into bytes via repeated division by 256. Leading 1 characters restore leading zero bytes.
Reference Data
| Value | Char | Value | Char | Value | Char | Value | Char |
|---|---|---|---|---|---|---|---|
| 0 | 1 | 15 | G | 30 | X | 45 | n |
| 1 | 2 | 16 | H | 31 | Y | 46 | o |
| 2 | 3 | 17 | J | 32 | Z | 47 | p |
| 3 | 4 | 18 | K | 33 | a | 48 | q |
| 4 | 5 | 19 | L | 34 | b | 49 | r |
| 5 | 6 | 20 | M | 35 | c | 50 | s |
| 6 | 7 | 21 | N | 36 | d | 51 | t |
| 7 | 8 | 22 | P | 37 | e | 52 | u |
| 8 | 9 | 23 | Q | 38 | f | 53 | v |
| 9 | A | 24 | R | 39 | g | 54 | w |
| 10 | B | 25 | S | 40 | h | 55 | x |
| 11 | C | 26 | T | 41 | i | 56 | y |
| 12 | D | 27 | U | 42 | j | 57 | z |
| 13 | E | 28 | V | 43 | k | ||
| 14 | F | 29 | W | 44 | m | ||