Base58 Encode / Decode — Base58Check & Bitcoin Address Inspector
Encode and decode Bitcoin's Base58 alphabet, add or verify the 4-byte double-SHA256 Base58Check checksum, inspect address prefixes (P2PKH, P2SH, bech32), and upload files up to 5 MB.
What is Base58 Encoder / Decoder & Address Inspector?
Base58 is a binary-to-text encoding designed for humans. It drops the visually ambiguous characters 0, O, I and l, plus the URL-hostile + and /, leaving 58 safe characters.
Zero-Server Tool Data Guarantee
All encoding, decoding, checksum and address inspection run locally in your browser. Your text, files, and addresses never leave your device — no server upload, no logging, no tracking.
How to Use
Pick a Mode
Encode turns text or a file into Base58; Decode turns Base58 back into text or hex; Address Inspector reads a Base58Check address's prefix and checksum.
Add or Verify Base58Check
In Encode, toggle 'Base58Check' to append the 4-byte checksum (set the version byte, default 00). In Decode, toggle 'Verify Base58Check' to validate a full string.
Choose Decode Output
Toggle 'Show as hex' to render the raw decoded bytes as hex instead of text.
Enter Input or Drop a File
Type, paste, or drop a text file up to 5 MB. Output updates in real time.
Copy
Use the copy button to grab the encoded, decoded, or inspection result.
Common Use Cases
Bitcoin Addresses
Encode P2PKH (1...), P2SH (3...), and WIF keys with the Base58Check checksum, or inspect an existing address's prefix.
Transaction / Block IDs
Represent 32-byte hashes as compact, copy-paste-safe Base58 strings for explorers and wallets.
Short Unique Identifiers
Generate human-friendly, typo-resistant IDs for records, tokens, and invite codes.
Checksum Verification
Validate that a pasted Base58Check string is intact before relying on it.
Encoded QR Codes
Encode compact identifiers into QR codes using an alphabet safe for manual fallback entry.
Implementation Examples
const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';function base58Encode(bytes) {let num = BigInt('0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join(''));let result = '';while (num > 0n) { result = ALPHABET[Number(num % 58n)] + result; num /= 58n; }for (const b of bytes) { if (b === 0) result = '1' + result; else break; }return result;}// Base58Check: version byte + payload + 4-byte double-SHA256 checksumasync function sha256d(bytes) {const h1 = await crypto.subtle.digest('SHA-256', bytes);return new Uint8Array(await crypto.subtle.digest('SHA-256', h1));}async function base58CheckEncode(payload, version = 0x00) {const full = new Uint8Array(1 + payload.length + 4);full[0] = version;full.set(payload, 1);full.set((await sha256d(full.slice(0, 1 + payload.length))).slice(0, 4), 1 + payload.length);return base58Encode(full);}
Base58 vs Base64
| Feature | Base58 | Base64 |
|---|---|---|
| Alphabet size | 58 characters | 64 characters |
| Ambiguous chars | None (excludes 0, O, I, l) | Possible (0, O, l, I, 1) |
| Special characters | None | +, /, = |
| Overhead | ~37% | 33% |
| Checksum? | Optional (Base58Check) | No |
| Primary use | Blockchain addresses | Data transport, embedding |
Production Best Practices & Security
Frequently Asked Questions
Base58 is a binary-to-text encoding designed for human usability. It uses 58 characters — A-Z, a-z, and 0-9 — while deliberately excluding the visually ambiguous 0 (zero), O, I, and l, as well as the URL-hostile + and /.
That removes the classic 0/O and 1/I/l confusion when reading or typing. Base58 is not an official RFC standard, but it became the de facto encoding for cryptocurrency addresses.