Base58 / Base62 / Base100 Encoder and Decoder
EncodingEverything runs locally in your browser — nothing is uploaded
Three encodings that avoid look-alike characters, each for its own occasion. Base58 is Bitcoin address encoding — it drops 0, O, I and l for a practical reason: wallet addresses get checked by eye against a screen, and in most fonts 0 is indistinguishable from O while l is indistinguishable from I. One misread character sends funds to an address that cannot be recovered. Base62 uses the full set of digits and both letter cases, packing more content into the same length, which is why URL shorteners favour it. Base100 maps each byte to a fixed emoji (the 100 in the name is the 💯 joke); output grows about threefold, and its only purpose is making data look like emoji to slip past filters that only inspect printable characters. All three run locally in the browser; nothing you type is uploaded.
Features
- Four encodings: Base58 (Bitcoin), Base58 (Flickr), Base62 and Base100
- Both Base58 alphabets — they are incompatible, and the same data encodes to entirely different strings
- Base100 follows the stek29 specification: each byte maps to one emoji in U+1F3F7–U+1F4F6
- Non-ASCII text handled as UTF-8 bytes, matching Bitcoin wallets and other implementations
- Leading zero bytes are preserved — a Bitcoin address begins with 0x00, and dropping it changes the address
- A character outside the alphabet is reported by name instead of being dropped
- ⚠️ Also generates correctly formatted Bitcoin addresses (mainnet / testnet, P2PKH / P2SH) for test data. Nobody holds the private keys for these, so they are for fixtures only
How to use
- Choose the direction: encode or decode
- Choose the encoding (Base58 has two alphabets — pick the right one)
- Paste your content; the result appears as you type
- Click Copy to take the result
FAQ
- Why does Base58 leave out 0, O, I and l?
- Because its audience is a human comparing an address against a screen. In most fonts 0 and O are hard to tell apart, and so are l and I. Misread one character in a Bitcoin address and the funds go to an address that either does not exist or belongs to someone else, with no way to reverse it. Four fewer characters costs about 3% in length and removes an entire class of human error. It is why Bitcoin addresses never contain those two digits or those two letters.
- How do the Bitcoin and Flickr Base58 alphabets differ?
- Only in where the uppercase letters sit: Bitcoin puts them first (123456789ABC…abc…), Flickr puts them last (123456789abc…ABC…). Neither contains 0, O, I or l. They are incompatible — decode a string with the wrong table and you get entirely different bytes, silently, with no error. Confirm which table the other side uses before you rely on it.
- What is Base100, and why is the output longer?
- Base100 maps every byte to a fixed emoji (byte n becomes code point U+1F3F7 + n). It is fixed-length, one character per byte, with no base conversion involved. Output therefore always grows: a byte takes 3–4 bytes in UTF-8, and the emoji adds its own bytes on top. It is neither compression nor encryption — its purpose is turning data into something that looks like emoji to a filter that only accepts printable characters.
- Decoding says the bytes are not valid UTF-8 text
- That means the encoded string carries binary rather than text. Base58 is most often used on binary data — a Bitcoin address holds a version byte, a public key hash and a checksum, none of which is meant to be read as text. The output here is a text box and cannot display binary, so it reports an error rather than handing you mojibake.
- Why does decoding a Base58 string starting with "1" produce extra bytes?
- Base58 is a big-integer representation, and big-integer notation swallows leading 0x00 bytes — [0x00, 0x41] and [0x41] have exactly the same numeric value. To round-trip correctly, the convention is that each leading 0x00 byte is written as one instance of the first alphabet character (which is "1" in the Bitcoin table). So every leading "1" stands for a real 0x00 byte, not padding. That mechanism is how Bitcoin addresses keep their version byte intact.
- Can the generated Bitcoin addresses receive money?
- No — and this needs to be unambiguous: coins sent to them are destroyed, and nobody can recover them. A real Bitcoin address is the HASH160 of a public key; here twenty random bytes are used as that HASH160 directly. Statistically that is indistinguishable from a real address, but the matching private key was never generated and nobody holds it. That leaves exactly one use: test data. When you need a correctly formatted address for a demo, a screenshot, documentation or a test fixture, a real address would publish a third party’s receiving address, whereas these are random and unowned. They never appear on the blockchain — they are just strings with valid format.
- Why is there no SegWit bc1 address?
- Because bech32 is not Base58. `bc1q…` uses a completely different algorithm: a different alphabet (32 characters, all lowercase) and a different checksum (a BCH code that can *correct* up to four mistyped characters, where Base58Check can only *detect* errors). Slipping it in among the Base58 variants would imply the encoding is interchangeable, when in fact swapping the alphabet produces something entirely different. Use a dedicated bech32 tool for SegWit. Note also that what this page generates is a Base58Check address (P2PKH / P2SH) — no mnemonic and no private key. It is an address, not a wallet.
Related tools
Base64
EncodingConvert text to Base64 and back, with correct UTF-8 handling for accents, CJK and emoji. Runs entirely in your browser — nothing is uploaded.
Base32
EncodingConvert text to and from Base32 using the standard alphabet or base32hex. Non-ASCII text is encoded as UTF-8 bytes; decoding tolerates lowercase.
Hash
EncodingCompute MD5, SHA-1, SHA-256, SHA-512 or MD4 digests of any text, hashed as UTF-8 bytes so they match openssl exactly. Runs in your browser.
URL Encode
EncodingEscape text into %XX form and back again, treating a whole URL and a single parameter value as different jobs. Runs entirely in your browser.
HTML Entities
EncodingTurn < > & and quotes into HTML entities and decode them back in a single pass, so &lt; becomes <, not an angle bracket. Runs in your browser.
JWT Decoder & Verifier
EncodingDecode a JWT and verify an HS256, HS384 or HS512 signature with your secret, reading exp and nbf as dates. All local to your browser.