Codificatore e decodificatore Base58Check

Aggiungi un checksum doppio SHA-256 di 4 byte e codifica in Base58, oppure decodifica una stringa Base58Check, verificane il checksum e leggi il byte di versione e il payload.

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Scegli Codifica per creare una stringa Base58Check, oppure Decodifica per verificarne una e recuperarne i byte.
  2. 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.
  3. Lascia attiva l’opzione Checksum Base58Check. Il checksum viene aggiunto in codifica e verificato in decodifica.
  4. 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

  1. 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.
  2. 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.
  3. Si aggiunge il checksum in coda e si codifica il tutto in Base58. Ogni byte 0x00 iniziale diventa un 1.

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 versioneDatiLa stringa codificata inizia con
0x00Indirizzo Bitcoin P2PKH (HASH160 di 20 byte)1
0x05Indirizzo Bitcoin P2SH (hash dello script di 20 byte)3
0x6FIndirizzo P2PKH della testnet Bitcoinm o n
0x80Chiave 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

Alfabeto1-9 A-Z a-z senza 0 O I l
Dimensione dell’outputCirca 137% più un checksum di 4 byte
PaddingNessuno
StandardBitcoin Base58Check
Distingue maiuscole/minuscoleSì

Esempi

Input (UTF-8)Output
Hello, World!gTazoqFvnegwaKM8v1B33sR
Base64.is6XgW4KVJr8DBmZEAeJ
你好DrMzxHL43oWHbW

Domande frequenti

Perché la decodifica fallisce con un errore di checksum?
Può darsi che un carattere sia stato digitato male, che sia selezionato l’alfabeto sbagliato o che la stringa sia Base58 semplice, senza checksum. Le stringhe Base58 semplici, come gli indirizzi Solana e i CID IPFS, vanno decodificate nella pagina Base58.
Lo strumento aggiunge il byte di versione al posto mio?
No. Il checksum viene calcolato sui byte che inserisci, quindi il byte di versione deve far parte dell’input. Imposta Formato input su Esadecimale e digitalo per primo, per esempio 00 per un indirizzo Bitcoin.
Posso decodificare una chiave privata WIF?
Sì. Incollala nella scheda Decodifica e scegli l’output Esadecimale. Otterrai 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).