Codificatore e decodificatore Base32hex

Converti testo, byte esadecimali o file in Base32 con l’alfabeto esadecimale esteso, e viceversa. Controlla padding e maiuscole/minuscole, per esempio per produrre etichette in stile NSEC3.

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Scegli Codifica per trasformare il testo in Base32hex, oppure Decodifica per riportare il Base32hex in testo.
  2. Lascia selezionata la variante Base32hex. Disattiva il Padding o passa a Minuscole se il tuo formato lo richiede.
  3. Digita o incolla l’input, oppure apri un file. Il risultato si aggiorna mentre scrivi.
  4. Copia il risultato o scaricalo come file.

Che cos’è Base32hex?

Base32hex è la "Base 32 Encoding with Extended Hex Alphabet", cioè la codifica Base32 con alfabeto esadecimale esteso, definita nella sezione 7 della RFC 4648. Funziona esattamente come il Base32 standard: ogni carattere trasporta 5 bit, ogni 5 byte diventano 8 caratteri e l’output viene completato con = fino a un multiplo di 8. Cambia solo l’alfabeto. Al posto di A-Z 2-7, Base32hex continua a contare da dove si ferma l’esadecimale: le cifre da 0 a 9 valgono da 0 a 9, A vale 10 e V vale 31.

Poiché i due alfabeti hanno in comune la maggior parte dei caratteri, spesso una stringa Base32hex può essere passata a un decodificatore Base32 standard senza errori, ma i byte che ne escono sono sbagliati. Decodifica sempre con la stessa variante usata per la codifica.

L’ordinamento viene mantenuto

L’alfabeto segue l’ordine ASCII crescente e il valore di ogni carattere aumenta con la sua posizione. Di conseguenza, confrontare due stringhe Base32hex carattere per carattere dà lo stesso ordine che si ottiene confrontando i byte sottostanti. La RFC 4648 sottolinea che è proprio questa la proprietà che manca al Base32 standard e a Base64, e grazie a essa Base32hex si presta bene come chiave in archivi ordinati come database e key-value store.

Scrivi tutte le stringhe con lo stesso tipo di lettere e disattiva il padding quando gli input hanno lunghezze diverse: il segno = si colloca tra le cifre e le lettere e può alterare l’ordine.

Base32hex nei record DNSSEC NSEC3

I record NSEC3, definiti nella RFC 5155, dimostrano che un nome DNS non esiste e allo stesso tempo rendono più difficile elencare tutti i nomi della zona. Ogni nome viene sottoposto a hash con SHA-1, e l’hash di 20 byte viene scritto come etichetta Base32hex di 32 caratteri senza padding, di solito mostrata in minuscolo. Poiché la codifica mantiene l’ordine degli hash, i nomi sottoposti a hash formano una catena ordinata. Per trasformare un hash in un’etichetta di questo tipo, incollalo come input esadecimale, disattiva il Padding e scegli Minuscole. Questo strumento esegue solo la fase di codifica: non calcola l’hash NSEC3 con salt e iterazioni.

Base32hex nel codice

# Python 3.10+
import base64
base64.b32hexencode(b'foobar')          # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'

// Go (pacchetto "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)

Specifiche

Alfabeto0-9 A-V
Dimensione dell’output8 caratteri ogni 5 byte (160%)
Padding= fino a un multiplo di 8 caratteri
StandardRFC 4648, sezione 7
Distingue maiuscole/minuscoleNo

Esempi

Input (UTF-8)Output
Hello, World!91IMOR3F5GG5ERRIDHI22===
Base64.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

Domande frequenti

Qual è la differenza tra Base32 e Base32hex?
Entrambi usano 5 bit per carattere e le stesse regole di padding. Il Base32 standard usa A-Z 2-7; Base32hex usa 0-9 A-V, che mantiene l’ordinamento dei dati. I due non sono intercambiabili.
Base32hex distingue tra maiuscole e minuscole?

L’alfabeto è definito in maiuscolo, ma questo decodificatore accetta anche input in minuscolo. Attiva Minuscole se ti serve un output in minuscolo, per esempio per le etichette DNS.

Devo usare il padding?
La RFC 4648 completa con = fino a un multiplo di 8 caratteri, ma molti formati, tra cui NSEC3, lo omettono. Il decodificatore accetta entrambe le forme, quindi scegli quella che si aspetta il sistema di destinazione.
Una stringa Base32hex è la stessa cosa dell’esadecimale?
No. Una stringa Base32hex che per caso contiene solo 0-9 e A-F sembra esadecimale, ma ogni carattere trasporta 5 bit invece di 4. Per lavorare con il normale esadecimale, usa lo strumento Base16.