Come si usa
- Scegli Codifica per trasformare testo o byte in Base58, oppure Decodifica per riportare una stringa Base58 ai dati originali.
- Seleziona l’Alfabeto. Bitcoin è quello predefinito ed è lo stesso usato da IPFS e Solana.
- Digita o incolla l’input. Se hai byte grezzi, come un hash o una chiave pubblica, imposta Formato input su Esadecimale.
- Attiva Checksum Base58Check solo se la stringa contiene un checksum di 4 byte, poi copia o scarica il risultato.
Che cos’è Base58?
Base58 è una codifica da binario a testo nata per Bitcoin. Il suo alfabeto comprende le 62 cifre e lettere latine, meno quattro caratteri facili da confondere: 0 (zero), O (o maiuscola), I (i maiuscola) e l (L minuscola). Non contiene nemmeno +, / o =, quindi una stringa Base58 si seleziona con un doppio clic e si può inserire in un URL senza escape.
A differenza di Base64, Base58 non divide l’input in gruppi di bit. L’intero input viene trattato come un unico numero grande e scritto in base 58, per cui non c’è padding e la modifica di un solo byte può cambiare molti caratteri dell’output. I byte zero iniziali non hanno valore numerico, quindi per conservarli ciascuno viene scritto come il primo carattere dell’alfabeto (1 nell’alfabeto Bitcoin). L’output è circa 1,37 volte più grande dell’input.
Dove si usa Base58
- Bitcoin. Gli indirizzi legacy e le chiavi private WIF sono in Base58Check, cioè Base58 con un byte di versione e un checksum.
- IPFS. Un identificatore di contenuto versione 0 (CIDv0) è la forma Base58 di un multihash SHA-256: per questo quei CID sono lunghi 46 caratteri e iniziano con
Qm. - Solana. Chiavi pubbliche, indirizzi degli account e firme delle transazioni si scrivono in Base58 semplice, senza checksum. Una chiave di 32 byte diventa di solito una stringa di 43 o 44 caratteri.
- Flickr e XRP Ledger. I link brevi di Flickr usano l’alfabeto Flickr, mentre gli indirizzi XRP usano l’alfabeto Ripple, ed è per questo che iniziano con
r.
Per passare da Base58 a byte grezzi e viceversa usa Base58 in esadecimale e Esadecimale in Base58. Per identificatori che devono essere soltanto alfanumerici, confronta con Base62.
Alfabeti Base58
| Alfabeto | Caratteri, in ordine |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
Tutti e tre usano gli stessi 58 caratteri in ordine diverso, quindi una stringa codificata con un alfabeto, se decodificata con un altro, produce byte diversi oppure un errore.
Base58 nel codice
# Python (installa con pip install base58)
import base58
base58.b58encode(b'hello') # b'Cn8eVZg'
base58.b58decode('Cn8eVZg') # b'hello'
// JavaScript (installa con npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));
Specifiche
| Alfabeto | 1-9 A-Z a-z senza 0 O I l |
|---|---|
| Dimensione dell’output | Circa 137% (conversione come intero grande) |
| Padding | Nessuno (i byte zero iniziali diventano 1) |
| Standard | Bitcoin Base58 |
| Distingue maiuscole/minuscole | Sì |
Esempi
| Input (UTF-8) | Output |
|---|---|
Hello, World! | 72k1xXWG59fYdzSNoA |
Base64.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
Domande frequenti
Perché i byte zero iniziali diventano 1?
1. Ecco perché 32 byte zero vengono codificati come una sequenza di 32 cifre 1.Base58 distingue tra maiuscole e minuscole?
Sì. Le lettere maiuscole e minuscole sono cifre diverse, quindi cambiare maiuscola o minuscola anche in un solo carattere modifica i byte decodificati o rende la stringa non valida.