User Rating 0.0 โ˜…โ˜…โ˜…โ˜…โ˜…
Total Usage 0 times
Accepts Bitcoin Base58 alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Output Format
Is this tool helpful?

Your feedback helps us improve.

โ˜… โ˜… โ˜… โ˜… โ˜…

About

Base58 encoding is a binary-to-text scheme designed to represent large integers as compact, human-readable strings. It uses an alphabet of 58 characters that deliberately excludes visually ambiguous glyphs: zero (0), uppercase O, lowercase l, and uppercase I. This prevents transcription errors when addresses or identifiers are read aloud or handwritten. The encoding is not a simple positional mapping. Each input character carries a weight of 58n, and decoding requires arbitrary-precision integer division across the full byte array. A naive lookup table will not suffice. Incorrect decoding of a cryptocurrency address means funds sent to a non-existent destination with zero possibility of recovery.

This tool implements the Bitcoin Base58 alphabet (123456789ABCDEFGH...xyz) with real big-integer arithmetic on byte arrays. It preserves leading zero bytes encoded as the character 1. Output is available as UTF-8 text, hexadecimal, or decimal byte values. Note: this decoder does not validate Base58Check checksums. If you need checksum verification for Bitcoin addresses, validate the trailing 4 bytes separately against a double SHA-256 hash of the payload.

base58 decode encoder bitcoin cryptocurrency base58check converter

Formulas

Base58 decoding converts a string of characters from the Base58 alphabet into a sequence of raw bytes. The process treats the input as a base-58 number and converts it to base-256 (bytes).

value = nโˆ’1โˆ‘i=0 charValuei ร— 58(nโˆ’1โˆ’i)

Where n is the length of the input string, charValuei is the integer value (0 - 57) of the i-th character in the Base58 alphabet. The accumulated integer is then converted to a big-endian byte array. Leading 1 characters (value 0) in the input map to leading 0x00 bytes in the output.

Algorithm steps:

1. Count leading 1 characters โ†’ leadingZeros

2. For each remaining character, multiply accumulator by 58, add charValue

3. Convert accumulator to bytes (repeated division by 256)

4. Prepend leadingZeros zero bytes

Where charValue = indexOf(char) in the alphabet string 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. If any character is not found in the alphabet, the input is invalid.

Reference Data

CharacterValueCharacterValueCharacterValueCharacterValue
10G15X31o47
21H16Y32p48
32J17Z33q49
43K18a34r50
54L19b35s51
65M20c36t52
76N21d37u53
87P22e38v54
98Q23f39w55
A9R24g40x56
B10S25h41y57
C11T26i42 -
D12U27j43 -
E13V28k44 -
F14W29m45 -
Excluded characters: 0 (zero), O (uppercase O), I (uppercase I), l (lowercase L)
Alphabet origin: Bitcoin (Satoshi Nakamoto, 2009). Also used by IPFS, Monero, Ripple (with modified alphabet), Flickr short URLs.
Base58Check: Payload + first 4 bytes of SHA-256(SHA-256(payload)). Used in Bitcoin addresses, WIF private keys.
Encoding ratio: ~1.37 Base58 characters per input byte (vs 1.33 for Base64)
Max address length (Bitcoin P2PKH): 34 characters, starting with 1
Max address length (Bitcoin P2SH): 34 characters, starting with 3

Frequently Asked Questions

These four characters are visually ambiguous in many typefaces. The digit 0 and uppercase O are nearly identical, as are uppercase I and lowercase l. Satoshi Nakamoto excluded them from the Bitcoin Base58 alphabet to minimize transcription errors when users copy addresses by hand or read them aloud. A single incorrect character in a cryptocurrency address results in permanent loss of funds.
Base58 is the raw encoding scheme. Base58Check adds a 4-byte checksum to the payload before encoding. The checksum is the first 4 bytes of SHA-256(SHA-256(version_byte + payload)). When decoding a Base58Check string, you decode normally, then verify that the last 4 bytes match the double-SHA-256 of the preceding bytes. This tool performs raw Base58 decoding without checksum validation.
In Base58, the character "1" has a value of 0. Leading "1" characters represent leading zero bytes (0x00) in the decoded output. The decoder counts consecutive leading "1" characters and prepends that many zero bytes to the result. This is critical for Bitcoin addresses where the version byte 0x00 maps to a leading "1".
The decoder uses big-integer arithmetic via byte arrays. Time complexity is O(nยฒ) where n is the input length, because each character requires a full-array multiply-and-add pass. For typical inputs (cryptocurrency addresses at 25-34 characters), decoding is instantaneous. For strings exceeding several thousand characters, noticeable delay may occur. Strings over 10,000 characters may take several seconds.
Base58 encodes arbitrary binary data, not necessarily valid UTF-8 text. If the original data was binary (a hash, a public key, or compressed data), interpreting it as UTF-8 text will produce replacement characters (U+FFFD) or gibberish. Switch the output format to Hexadecimal or Decimal to inspect the raw bytes. Bitcoin addresses, for instance, decode to a version byte followed by a 20-byte hash - not readable text.
Yes. Ripple uses the alphabet rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz, which reorders characters compared to Bitcoin's 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. This tool implements the Bitcoin alphabet. Decoding a Ripple address with this tool will produce incorrect output.