Come codificare e decodificare in Base64
- Scegli Codifica per trasformare il testo in Base64, oppure Decodifica per riportare il Base64 a testo.
- Incolla il tuo input. Il testo viene trattato come UTF-8, quindi lettere accentate, alfabeti non latini ed emoji funzionano correttamente.
- Attiva l'opzione URL-safe se il risultato va inserito in un URL, in un nome di file o in un JWT.
- Copia l'output.
Codifica e decodifica avvengono in locale nel tuo browser; nulla di ciò che incolli viene caricato o salvato.
Come funziona il Base64
Il Base64, definito nella RFC 4648, rappresenta dati binari arbitrari con 64 caratteri ASCII stampabili: A–Z, a–z, 0–9, + e /. Esiste perché i contenuti binari possano viaggiare in sicurezza attraverso sistemi pensati per il testo, come email, JSON, XML e header HTTP.
L'algoritmo prende l'input 3 byte (24 bit) alla volta e li divide in quattro gruppi da 6 bit. Ogni valore a 6 bit (0–63) seleziona un carattere dell'alfabeto. La parola Man mostra il procedimento:
| Passaggio | Valore |
|---|---|
| Byte | M=77, a=97, n=110 |
| 24 bit | 01001101 01100001 01101110 |
| Gruppi da 6 bit | 010011 010110 000101 101110 = 19, 22, 5, 46 |
| Base64 | TWFu |
Poiché ogni 3 byte diventano 4 caratteri, l'output Base64 è circa il 33% più grande dell'input (più gli a capo, se un formato come MIME li inserisce).
Il padding con =
Quando la lunghezza dell'input non è un multiplo di tre, l'ultimo gruppo viene completato con il padding. Un byte avanzato produce due caratteri più ==; due byte avanzati producono tre caratteri più =. Per esempio, Hi diventa SGk=.
Base64 URL-safe
I caratteri standard + e / hanno un significato speciale negli URL e nei percorsi dei file. La RFC 4648 §5 definisce l'alfabeto base64url, che li sostituisce con - e _. Spesso il padding viene omesso. I JSON Web Token usano base64url senza padding.
Standard: +/8=
URL-safe: -_8
Errori comuni
Il Base64 non è crittografia
Chiunque può decodificare il Base64 all'istante; non c'è nessuna chiave. Non usarlo mai per "nascondere" password o chiavi API. Per i controlli di integrità usa un hash creato con il generatore di hash, e per la riservatezza usa una vera crittografia.
UTF-8 in JavaScript
La funzione integrata del browser btoa() accetta solo caratteri dell'intervallo Latin-1 e genera un errore per tutto il resto. Converti prima il testo in byte UTF-8:
btoa("✓"); // InvalidCharacterError
const bytes = new TextEncoder().encode("✓");
btoa(String.fromCharCode(...bytes)); // "4pyT"
Mescolare gli alfabeti
La decodifica di dati base64url con un decodificatore standard rigoroso fallisce su - e _, oppure se manca il padding. Converti l'alfabeto e aggiungi di nuovo il padding fino a un multiplo di quattro caratteri prima di decodificare.
Dove incontrerai il Base64
- Data URI, che incorporano piccoli file direttamente in HTML o CSS:
data:image/png;base64,iVBORw0KGgo... - L'autenticazione HTTP Basic invia
username:passwordcodificati in Base64.user:passdiventaAuthorization: Basic dXNlcjpwYXNz, che si inverte banalmente, quindi la Basic auth va usata solo su HTTPS. Puoi esaminare questi header con il verificatore di header HTTP. - Allegati email (MIME) e certificati e chiavi PEM.
- I JWT, il cui header e payload sono JSON codificati in base64url. Usa il decoder JWT per leggerli.
printf 'text' | base64 codifica e base64 -d decodifica (le versioni meno recenti di macOS usano -D). Usa printf o echo -n per non codificare anche un a capo finale.Domande frequenti
Perché la mia stringa Base64 finisce con = o ==?
È il padding. Indica al decodificatore quanti byte conteneva l'ultimo gruppo quando la lunghezza dell'input non era divisibile per tre.
Il Base64 è sicuro?
No. È una codifica, non una crittografia. Non offre alcuna riservatezza; serve solo a rendere i dati binari sicuri da trasportare come testo.
Perché l'output codificato è più grande dell'input?
Ogni carattere Base64 trasporta 6 bit invece di 8, quindi 3 byte di input richiedono 4 caratteri di output, un sovraccarico di circa un terzo.
Qual è la differenza tra Base64 e base64url?
Cambiano solo due caratteri: base64url usa - e _ invece di + e /, e di solito elimina il padding =, così il risultato può essere inserito negli URL senza ulteriori escape.
Aggiornato