Dev tools

Base58 encode

Base58 encode. Runs on your device, nothing is uploaded.

Runs on your device. The file is never uploaded.

Base58 encode treats the whole file as one big number and writes it in 58 symbols that cannot be confused by eye. Lowercase l, capital I, capital O and the digit zero are all absent. Each leading zero byte prints as a 1. No version byte or checksum is added, so the output is not a Bitcoin address.

Input

Questions

Why does Base58 leave out some characters?

To stop misreadings. The alphabet is 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz, which drops the digit zero, capital O, capital I and lowercase l because they look alike in many fonts, and drops plus and slash so a string stays selectable with a double click.

Is this the Bitcoin alphabet?

Yes. It is the same 58-character ordering used by Bitcoin and by IPFS content identifiers, starting at 1 and running through the digits, then the uppercase letters without I and O, then the lowercase letters without l. A value encoded here decodes with any standard Base58 library that uses that alphabet.

Does this produce a Bitcoin address?

No. This is plain Base58, not Base58Check. It does not prepend a version byte and it does not append the four-byte checksum an address carries, so the result is not a valid address and nothing here validates one. It only rewrites the bytes you gave it.

Why do the leading zero bytes turn into 1 characters?

Base58 treats the whole input as one large number, and leading zeros add nothing to a number. So they are counted separately and written as one leading 1 each, since 1 is the first character of the alphabet. That is the canonical rule, and it is what makes the encoding round-trip a file that starts with zero bytes.

Why does the whole output change when I edit one byte?

Because the input is converted as a single big integer rather than in fixed groups. Base64 and Base32 chop the input into chunks, so an early change leaves the tail alone. Base58 has no chunk boundaries, so one different byte near the start rewrites nearly every character after it. It is also slower on large files for the same reason.

Does anything leave my browser?

No. The conversion runs in a Web Worker on your device, with nothing uploaded and nothing kept after the tab closes. There is no account to create and no request to a server at any point, so you can check it by opening your network panel or by pulling the plug and encoding anyway.

Related Dev tools