Overview
Base58 is an encoding system that converts binary data into a compact, human-readable string using 58 alphanumeric characters. It was designed by Satoshi Nakamoto specifically for Bitcoin to minimize the chance of errors when users manually copy or transcribe addresses and private keys.
Character Set
Base58 uses the following characters, deliberately excluding those that are easily confused:
Standard Base64 alphabet:
A-Z a-z 0-9 + /
Base58 removes these ambiguous characters:
0 (zero) ← confused with O
O (capital) ← confused with 0
I (capital) ← confused with l or 1
l (lower) ← confused with I or 1
+ and / ← not alphanumeric
Resulting Base58 alphabet:
1 2 3 4 5 6 7 8 9
A B C D E F G H J K L M N P Q R S T U V W X Y Z
a b c d e f g h i j k m n o p q r s t u v w x y z
Base58Check
Base58Check extends Base58 by prepending a version byte and appending a 4-byte checksum (the first 4 bytes of a double SHA-256 hash of the payload). This checksum allows wallets to detect typos before sending a transaction to an invalid address.
Transition to Bech32
While Base58Check served Bitcoin well for years, it has been largely superseded by Bech32 for SegWit addresses. Bech32 provides stronger error detection, is case-insensitive, and produces smaller QR codes. However, Base58Check is still widely used for legacy addresses and WIF-encoded private keys.