Come si usa
- Scegli Codifica per creare una stringa Base58Check, oppure Decodifica per verificarne una e recuperarne i byte.
- Per codificare, imposta Formato input su Esadecimale e inserisci il byte di versione seguito dal payload, per esempio 00 e un HASH160 di 20 byte.
- Lascia attiva l’opzione Checksum Base58Check. Il checksum viene aggiunto in codifica e verificato in decodifica.
- Per decodificare, incolla la stringa e imposta Formato output su Esadecimale. Otterrai il byte di versione e il payload, senza il checksum.
Come funziona Base58Check
- Si parte da un byte di versione che indica il tipo di dati, seguito dal payload, per esempio l’hash di 20 byte di una chiave pubblica.
- Si calcola lo SHA-256 di questi byte, poi di nuovo lo SHA-256 del risultato, e se ne tengono i primi 4 byte come checksum.
- Si aggiunge il checksum in coda e si codifica il tutto in Base58. Ogni byte
0x00iniziale diventa un1.
Questo strumento calcola il checksum esattamente sui byte che inserisci. Non aggiunge un byte di versione al posto tuo, quindi includilo all’inizio dell’input. In decodifica ricalcola il checksum su tutto tranne gli ultimi 4 byte. Se coincidono, ottieni il byte di versione e il payload; altrimenti ricevi un errore di checksum. Un errore di battitura casuale sfugge al controllo solo circa una volta su quattro miliardi.
Byte di versione comuni
| Byte di versione | Dati | La stringa codificata inizia con |
|---|---|---|
0x00 | Indirizzo Bitcoin P2PKH (HASH160 di 20 byte) | 1 |
0x05 | Indirizzo Bitcoin P2SH (hash dello script di 20 byte) | 3 |
0x6F | Indirizzo P2PKH della testnet Bitcoin | m o n |
0x80 | Chiave privata WIF (32 byte, più 0x01 per una chiave compressa) | 5, oppure K / L se compressa |
Gli indirizzi SegWit e Taproot che iniziano con bc1 usano Bech32, non Base58Check, e qui non si possono decodificare. Gli indirizzi dell’XRP Ledger usano lo stesso checksum con l’alfabeto Ripple: seleziona Ripple nell’opzione Alfabeto.
Esempio: da HASH160 a indirizzo
Il noto indirizzo associato al blocco genesi di Bitcoin è formato dal byte di versione 00 seguito da un HASH160 di 20 byte. Inserendoli come input Esadecimale con Base58Check attivo, si ottiene l’indirizzo che tutti conoscono:
Input (Esadecimale) 00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Output 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Nel codice, il pacchetto Python base58 fornisce b58encode_check() e b58decode_check(), mentre il pacchetto npm bs58check offre encode() e decode().
Specifiche
| Alfabeto | 1-9 A-Z a-z senza 0 O I l |
|---|---|
| Dimensione dell’output | Circa 137% più un checksum di 4 byte |
| Padding | Nessuno |
| Standard | Bitcoin Base58Check |
| Distingue maiuscole/minuscole | Sì |
Esempi
| Input (UTF-8) | Output |
|---|---|
Hello, World! | gTazoqFvnegwaKM8v1B33sR |
Base64.is | 6XgW4KVJr8DBmZEAeJ |
你好 | DrMzxHL43oWHbW |
Domande frequenti
Perché la decodifica fallisce con un errore di checksum?
Lo strumento aggiunge il byte di versione al posto mio?
00 per un indirizzo Bitcoin.Posso decodificare una chiave privata WIF?
80, la chiave di 32 byte e, per le chiavi compresse, un 01 finale. La decodifica avviene localmente nel browser, ma tratta comunque con cautela le chiavi private reali.Posso decodificare gli indirizzi bc1?
No. Gli indirizzi SegWit nativi e Taproot usano Bech32 o Bech32m, una codifica diversa con un proprio checksum. In Bitcoin, Base58Check si usa solo per gli indirizzi legacy che iniziano con 1 o 3 (m, n o 2 sulla testnet).