Convertitore Base32 / Base58

Codifichi testo o decodifichi stringhe codificate in sette schemi: Base32 RFC 4648 (A-Z2-7), base32hex (0-9A-V), Base32 di Crockford, z-base-32, Base58 di Bitcoin, Base58 di Flickr e Base58 di Ripple. Sotto il convertitore c'è anche un generatore e verificatore autonomo di Base58Check (byte di versione + checksum SHA-256 doppio). Il testo viene trattato come byte UTF-8. Vedi anche: Base64 | Ascii85 | Testo esadecimale.
Tutta l'elaborazione avviene localmente nel suo browser — i dati non vengono mai caricati su nessun server.
Come funziona: Ogni carattere viene convertito in byte UTF-8, poi ogni schema impacchetta quei byte nel proprio alfabeto stampabile.
Schema:
Come funziona: La stringa codificata viene decodificata di nuovo in byte UTF-8 e mostrata come testo. Gli spazi e il riempimento = finale vengono ignorati; i caratteri non validi vengono segnalati con la loro posizione.
Schema:
Ctrl+Invio nell'input esegue la modalità attiva.
Scelga Codifica o Decodifica, selezioni uno schema e faccia clic sul relativo pulsante. Tutta l'elaborazione resta nel suo browser.

Codificatore Base58Check: Byte di versione (esadecimale): Carico utile (esadecimale):
Verificatore Base58Check: Indirizzo o stringa:
Base58Check è il formato degli indirizzi Bitcoin: un byte di versione, il carico utile, poi i primi quattro byte di SHA-256 applicato due volte al byte di versione e al carico utile insieme. Codifica scrive quella stringa; Verifica ne legge una e indica quale byte è sbagliato quando il checksum non corrisponde.
Informazioni su ciascuno schema:
Base32 (RFC 4648) — l'alfabeto classico, senza distinzione tra maiuscole e minuscole, A-Z 2-7; 8 byte diventano 13 caratteri più il riempimento. Molto usato per i segreti HOTP/TOTP, DNSSEC e i checksum dei file. Un riempimento = facoltativo viene aggiunto a meno che non lo disattivi.
Base32 Hex — l'alfabeto esteso 0-9 A-V, che si ordina naturalmente in ordine lessicografico ed è comodo quando il valore codificato è usato anche come identificatore simile a un esadecimale.
Base58 (Bitcoin) — Base64 senza 0 O I l + /, così l'output non contiene mai caratteri ambigui. È l'alfabeto usato per gli indirizzi Bitcoin. Gli zeri iniziali diventano la cifra 1.
Base58 (Flickr) — l'alfabeto degli short URL di Flickr, sensibile alle maiuscole in ordine inverso: cifre, poi minuscole, poi maiuscole.
Base32 di Crockford — le cifre e le lettere non ambigue 0-9 A-Z, senza I, L, O e U. La decodifica accetta anche I e L come 1, O come 0, le minuscole e i trattini come decorazione. Si può aggiungere un simbolo di controllo facoltativo modulo 37.
z-base-32 — gli stessi gruppi di cinque bit della Base32 RFC 4648, con l'alfabeto riordinato così che i caratteri che le persone digitano più spesso siano i più facili da scrivere. Nessun riempimento e nessun simbolo di controllo.
Base58 (Ripple / XRP) — un terzo ordinamento degli stessi 58 caratteri, usato dall'XRP Ledger. Il suo primo carattere è r, ed è per questo che gli indirizzi Ripple iniziano con quella lettera.
Base58Check — una stringa Base58 il cui carico utile porta quattro byte di checksum, così un indirizzo digitato male può essere rifiutato invece di inviare silenziosamente fondi altrove. Sotto il convertitore ci sono un generatore e un verificatore autonomi.
Che cosa sono Base32 e Base58?

Sono due risposte alla stessa domanda: a un canale che trasporta testo viene chiesto di trasportare byte. Base32 e Base58 non sono crittografia né hashing — non nascondono nulla e non accorciano nulla. Riscrivono una sequenza di byte usando un insieme fisso di caratteri leggibili, e chiunque conosca l'insieme usato può riportarla indietro direttamente. L'unico motivo per preferire l'una all'altra è ciò che il destinatario fa con i caratteri.

Due famiglie compiono questa riscrittura in modi del tutto diversi, e la differenza spiega quasi ogni sorpresa di questa pagina:

  • Impacchettamento di bit — Base32, Base32 Hex, Base32 di Crockford, z-base-32. I byte vengono tagliati in gruppi di lunghezza fissa e ogni cinque bit diventano un carattere. La lunghezza dell'output è prevedibile dalla lunghezza dell'input, e l'ultimo gruppo, parzialmente pieno, viene segnalato con caratteri di riempimento oppure lasciato corto.
  • Conversione di numeri grandi — tutte le tabelle Base58. L'intera sequenza di byte viene letta come un unico numero enorme in base 256 e riscritta in base 58. Non ci sono gruppi né riempimento; la lunghezza non si divide in nulla, e ogni byte zero iniziale diventa un simbolo zero iniziale.
Dove vanno i sei bit portatori di dati: Base32 usa cinque bit per carattere, quindi servono otto caratteri per ogni cinque byte di input — circa il 60% in più. Base58 usa circa 5,86 bit per carattere, quindi arriva vicino al 37% in più. Base64 impacchetta sei bit per carattere e arriva al 33%. Gli alfabeti più grandi sono più corti e più difficili da leggere a voce alta, ed è esattamente il compromesso che ciascuno fa.
I sette alfabeti di questa pagina

Ogni alfabeto è stampato per intero invece di essere descritto, perché due strumenti che stampano caratteri diversi con lo stesso nome non saranno d'accordo tra loro, qualunque sia l'etichetta. Le righe RFC 4648 sono normative; quelle di Crockford e z-base-32 seguono ciò che l'autore del formato ha pubblicato; le tre righe Base58 sono convenzioni diffuse e non standard, ed è per questo che sono elencate a parte.

Base32 di Crockford e il simbolo di controllo modulo 37

L'alfabeto elimina I, L, O e U perché nessun simbolo possa essere letto come un altro. Ciò che resta non distingue tra maiuscole e minuscole in ingresso: i e l si leggono come la cifra 1, o si legge come la cifra 0, e i trattini servono solo a rendere più leggibile una stringa lunga. In più il formato definisce un simbolo di controllo facoltativo, che è il valore della stringa di simboli letta come numero in base 32, preso modulo 37, e scritto con cinque simboli extra per i valori da 32 a 36.

Il simbolo di controllo viene calcolato sulla stringa di simboli, non sui byte: poiché il codificatore estende a zero l'ultimo gruppo, decodificare gli stessi caratteri riporta sempre allo stesso valore. Per questo il valore di controllo nella tabella può essere riprodotto a mano partendo solo dalla colonna codificata. I cinque simboli extra sono *, ~, $, = e U per i valori 32, 33, 34, 35 e 36, quindi un simbolo di controllo non è sempre una cifra o una lettera.

z-base-32

z-base-32 mantiene l'impacchettamento a cinque bit della Base32 RFC 4648 e cambia solo l'ordine dei trentadue caratteri. L'ordine è scelto in modo che i caratteri che una persona ha più probabilità di dover scrivere a mano siano quelli più facili da scrivere e più difficili da confondere. Non ha riempimento, quindi chi legge deve sapere quanti simboli ci si aspetta per un valore; è il prezzo di un formato pensato per essere letto a mano prima di tutto.

Base58Check: un byte di versione, il carico utile, quattro byte di checksum

La sola Base58 non ha modo di distinguere una stringa digitata male da una corretta, perché quasi qualsiasi combinazione dei suoi cinquantotto caratteri è un numero valido. Base58Check risolve il problema mettendo i dati dentro un involucro: un byte di versione, poi il carico utile, poi i primi quattro byte di SHA-256 applicato due volte in fila alle prime due parti. Un programma ricevente ricalcola quei quattro byte e rifiuta la stringa quando non coincidono. Il byte di versione è ciò che dice a un portafoglio se sta guardando un indirizzo di pagamento, un indirizzo di script o una chiave privata.

Il generatore sotto il convertitore prende il byte di versione e il carico utile in esadecimale e scrive la stringa Base58Check; il verificatore ne legge una, separa i quattro byte di checksum, li ricalcola e segnala sia quello trovato sia quello atteso. Un checksum sbagliato significa che la stringa è stata digitata male o alterata — non significa mai che il carico utile sia sbagliato, perché il carico utile non viene mai interpretato.

Equivoci comuni
  • "Base64 è crittografia." No. Non c'è una chiave né un segreto; l'output è reversibile da chiunque. Base32 e Base58 sono nella stessa posizione, e far passare un valore attraverso tutti e tre non aggiunge protezione.
  • "Una stringa Base58 è un indirizzo Bitcoin." Solo quando supera anche il checksum Base58Check e ha un byte di versione che il software ricevente riconosce. Le stringhe Base58 compaiono in molti altri posti, anche come identificatori semplici senza alcun checksum.
  • "I tre alfabeti Base58 sono intercambiabili." Usano gli stessi cinquantotto caratteri in tre ordini diversi, quindi gli stessi byte producono tre stringhe diverse. Uno strumento deve essere istruito su quale usare, e questa pagina dice sempre quale ha usato.
  • "Il riempimento fa parte del valore." I caratteri = segnano solo l'ultimo gruppo. Due stringhe Base32 che differiscono solo per il riempimento descrivono gli stessi byte, ed è per questo che il decodificatore accetta una stringa con il riempimento tagliato.
  • "Qualsiasi carattere va bene." Ogni alfabeto è un insieme fisso. Un carattere che ne sta fuori non ha valore, quindi il decodificatore si ferma e indica il carattere e la sua posizione invece di tirare a indovinare.
Domande ricorrenti

Perché Base32 usa 2-7 e non 0-9? Perché la RFC 4648 ha scelto l'alfabeto in modo che resti tra i caratteri consentiti in un nome di dominio e che sia facile da leggere a voce alta. Base32 Hex usa invece 0-9 A-V quando conta di più l'ordinamento naturale.

Perché una stringa Base58 comincia spesso con 1? Ogni byte zero iniziale dell'input diventa una 1 iniziale (il primo carattere degli alfabeti di Bitcoin e Flickr). Un byte di versione 0x00 è un byte zero, quindi la maggior parte degli indirizzi Bitcoin di mainnet comincia con esattamente un 1.

Che cosa carica il pulsante Esempio? L'esempio che appartiene allo schema e alla direzione attualmente sullo schermo, mai un testo fisso. Al codificatore viene dato il testo dell'esempio dello schema — i vettori della sezione 10 della RFC 4648 per Base32 e Base32 Hex, 12345 di Crockford, le righe z-base-32 stampate sopra — e al decodificatore viene dato la stringa codificata per l'alfabeto selezionato, che rende l'esempio utilizzabile in entrambe le direzioni. Le tre righe Base58 hanno intenzionalmente lo stesso testo, così cambiando schema e premendo di nuovo Esempio si vedono affiancati i tre ordinamenti degli stessi cinquantotto caratteri. Con il simbolo di controllo Crockford spuntato, al decodificatore viene passato il valore con il simbolo alla fine, che è l'unico modo per vedere il verificatore accettarne uno.

Questa pagina invia i miei dati da qualche parte? No. Ogni conversione avviene in questa scheda del browser, e la pagina non contiene alcuna chiamata di rete. È anche per questo che funziona con il file aperto direttamente dal disco.

Quale usare per un segreto? I segreti degli autenticatori TOTP e HOTP sono di solito in Base32 con l'alfabeto della RFC 4648, perché il segreto deve essere digitato a mano. Usi quello che chiede il suo software ricevente, e non faccia mai affidamento sulla codifica per la segretezza.