Come si usa
- Incolla la stringa esadecimale nel campo di input. Esadecimale è già selezionato come origine e Base64 come destinazione.
- Non preoccuparti della formattazione: spazi, interruzioni di riga, due punti, trattini e prefissi 0x o \x vengono ignorati.
- Imposta Base64URL come destinazione se il valore deve finire in un URL, in un JWT o in una JSON Web Key.
- Copia il risultato in Base64.
Perché convertire l’esadecimale in Base64
La maggior parte degli strumenti di hashing stampa i digest in esadecimale, ma molti protocolli si aspettano il Base64, che è più corto di un terzo. Casi tipici:
- Subresource Integrity. L’attributo
integritydi script e fogli di stile contiene un digest in Base64, per esempiosha384-seguito da 64 caratteri Base64. - Content Security Policy. Gli hash che autorizzano gli script inline si scrivono come
'sha256-...'seguito da un valore Base64. - Checksum nelle API HTTP. L’header
Content-MD5e gli header di checksum di Amazon S3 contengono il Base64 del digest binario, non la stringa esadecimale stampata damd5sum. - Identificatori compatti. Un UUID occupa 16 byte: 32 cifre esadecimali, ma solo 22 caratteri in Base64URL senza padding.
Formati esadecimali accettati
Le cifre esadecimali non distinguono tra maiuscole e minuscole. Prima della decodifica il convertitore rimuove spazi, interruzioni di riga, due punti, punti e virgola, virgole, trattini e i prefissi 0x, \x, % e &#x. In questo modo funzionano le impronte OpenSSL come AB:CD:EF, gli array C come 0x12, 0x34, le stringhe con sequenze di escape come \x12\x34, i byte con codifica percentuale e gli UUID con trattini.
Dopo la pulizia l’input deve contenere un numero pari di cifre, due per byte. Un numero dispari viene segnalato come errore e di solito significa che è andato perso uno zero iniziale, per esempio abc al posto di 0abc.
Codifica i byte, non il testo esadecimale
Un errore frequente è incollare un digest esadecimale in un normale codificatore da testo a Base64. Così vengono codificati i caratteri 0-9a-f invece dei byte che rappresentano, e il risultato è lungo il doppio del dovuto: 88 caratteri per un digest SHA-256 invece di 44. Tutto ciò che si aspetta il digest binario, come un attributo SRI o un header di checksum, lo rifiuterà. Questo convertitore decodifica prima l’esadecimale in byte.
# Shell: da digest esadecimale a Base64
printf '%s' "$HEX" | xxd -r -p | base64
# Valore SRI di un file in un solo passaggio
openssl dgst -sha384 -binary script.js | openssl base64 -A
# Python
base64.b64encode(bytes.fromhex(h)).decode()
// Node.js (si ferma senza errori al primo carattere non esadecimale)
Buffer.from(h, 'hex').toString('base64')
Domande frequenti
Perché ricevo un errore con la mia stringa esadecimale?
L’input contiene un carattere che non è una cifra esadecimale, come la lettera O al posto dello zero, oppure il numero di cifre è dispari. Il messaggio di errore indica la posizione del carattere non valido; se la lunghezza è dispari, controlla che non manchi uno 0 iniziale.
Quanto sarà lungo l’output Base64?
=.Come creo un hash Subresource Integrity?
integrity="sha384-..." con il valore Base64. Con OpenSSL puoi fare tutto con un solo comando: openssl dgst -sha384 -binary file.js | openssl base64 -A.L’output è Base64 standard o sicuro per URL?
+ e /, come richiesto da SRI, CSP e dagli header di checksum HTTP. Scegli Base64URL come codifica di destinazione quando ti serve un output sicuro per URL.