Guide
Base58 and Base58Check: readable identifiers with a checksum
Long identifiers are copied by hand more often than anyone likes: written on paper, read down a phone line, retyped from a screenshot. Base58 was designed for that world. It drops the characters that look alike in common fonts, 0 and O, I and l, and also removes the symbols + and / so that the whole string is selected by a double click. The Base58Check variant adds a checksum so that a typing error is noticed before it does harm.
The encoding
Unlike Base64, Base58 does not work on groups of bits. It reads the bytes as a single big number, repeatedly divides it by 58, and uses the remainders as indexes into the alphabet. The result is read in reverse. Because the number has no memory of leading zero bytes, each leading zero byte is written as one leading 1, the first character in the alphabet, and is restored on decoding. The sample “Hello World!”, twelve bytes, gives the 17 characters 2NEpo7TZRRrLZSi2U.
Base58Check
Base58Check wraps a payload in a safety layer. A version byte goes first, then the payload, then four checksum bytes taken from the start of SHA-256(SHA-256(version + payload)). The whole thing is then encoded in Base58. On decoding, the page recomputes the checksum and reports a mismatch. The version byte identifies the kind of data: 0x00 for a legacy Bitcoin address, 0x05 for a script address and 0x80 for an uncompressed private key in wallet import format.
Using the page
Pick encode or decode, choose text or hex as the input type, and tick Base58Check if you want a version byte and a checksum. The version byte is entered in hexadecimal. The output shows the number of bytes read and characters produced. For a Bitcoin-style address, enter the 20-byte hash as hex, set the version to 00, and the page produces the address; to verify an address, paste it and decode it, and the page reports whether the checksum holds and what the version and payload are.
A worked example
The well-known example from the Bitcoin documentation uses the hash 751e76e8199196d454941c45d1b3a323f1433bd6 with version 00. Base58Check turns it into 1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH. The leading 1 is the encoded version byte, a zero byte. If you change a single character of that address and decode it, the checksum fails, and the page says so instead of giving a payload.
Edge cases
An input that starts with zero bytes gives output that starts with 1s, one for each zero byte, and an empty input gives an empty output. A character outside the alphabet is rejected with its position, and the usual culprits are 0, O, I and l from retyping. Other Base58 alphabets exist, such as the ones used by Flickr and Ripple, which order the characters differently; this page uses the Bitcoin alphabet only.
Limits
Base58 is quadratic in the length of the input, so the page is meant for short values, not whole files. The checksum guards against accidents, not attackers: anyone can compute a valid one. A valid address also does not mean anyone controls it or that it has ever been used, and the page does not contact any network or blockchain service. Nothing you type leaves the browser.
Related tools
- Base32 Encoder is the case-insensitive alternative for secrets.
- Base64 Encoder handles files and longer data.
- Satoshi to BTC converts Bitcoin amounts between units.
- Hash Generator computes SHA-256 and other digests.
Checked against the current version of the Base58 Encoder on .

