Codificatore e decodificatore Base58

Converti testo, byte esadecimali o piccoli file in Base58 e viceversa. Scegli l’alfabeto Bitcoin, Flickr o Ripple e, se serve, aggiungi o verifica un checksum Base58Check.

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Scegli Codifica per trasformare testo o byte in Base58, oppure Decodifica per riportare una stringa Base58 ai dati originali.
  2. Seleziona l’Alfabeto. Bitcoin è quello predefinito ed è lo stesso usato da IPFS e Solana.
  3. Digita o incolla l’input. Se hai byte grezzi, come un hash o una chiave pubblica, imposta Formato input su Esadecimale.
  4. 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

AlfabetoCaratteri, in ordine
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

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

Alfabeto1-9 A-Z a-z senza 0 O I l
Dimensione dell’outputCirca 137% (conversione come intero grande)
PaddingNessuno (i byte zero iniziali diventano 1)
StandardBitcoin Base58
Distingue maiuscole/minuscoleSì

Esempi

Input (UTF-8)Output
Hello, World!72k1xXWG59fYdzSNoA
Base64.isr1Nm3AS7ZcnN
你好2xuZUfBKa

Domande frequenti

Perché i byte zero iniziali diventano 1?
Base58 converte l’input in un unico numero, e i byte zero iniziali non ne cambiano il valore. Per conservarli, ogni byte zero iniziale viene scritto come il primo carattere dell’alfabeto, che nell’alfabeto Bitcoin è 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.

Qual è la differenza tra Base58 e Base58Check?
Base58Check aggiunge un checksum di 4 byte (l’inizio di un doppio hash SHA-256) prima della codifica, così è possibile rilevare gli errori di battitura. Attiva qui l’opzione Checksum Base58Check, oppure consulta la pagina Base58Check per i dettagli.
Perché l’input è limitato a circa 20 KB?
Poiché l’intero input è un unico numero grande, il lavoro cresce con il quadrato della sua lunghezza. Base58 è pensato per chiavi, hash e indirizzi, non per i file. Per grandi quantità di dati usa Base64 o Base85.