Base64 spiegato: perché rende i dati più grandi e come decodificarlo
Base64 scrive i dati binari come testo semplice, usando 64 caratteri: da A a Z, da a a z, da 0 a 9, più + e /. Ogni tre byte diventano quattro caratteri, quindi il testo è circa un terzo più lungo dei dati che contiene. Si usa quando un formato accetta solo testo, come un data URL in una pagina web, un campo JSON o un allegato email.
Perché i formati di testo ne hanno bisogno
Molti formati sono nati solo per il testo. Il corpo di un'email, un file JSON e un file CSS possono contenere lettere e simboli senza problemi, ma un'immagine grezza o un file zip contiene valori di byte che alcuni sistemi modificherebbero, troncherebbero o interpreterebbero come codici di controllo. Base64 usa solo caratteri che ogni sistema di testo trasmette senza alterarli, così i dati arrivano integri. È definito nella RFC 4648.
Base64 è una codifica, non un segreto. Chiunque può decodificarla senza chiave, quindi non va mai usata per nascondere una password o dati personali.
Come tre byte diventano quattro caratteri
Prendi la parola Man, che è composta da tre byte: 77, 97 e 110 in decimale. Insieme, questi tre byte formano 24 bit. Dividi i 24 bit in quattro gruppi da sei bit: ogni gruppo è un numero da 0 a 63, che indica un carattere dell'alfabeto. Man diventa TWFu.
Sei bit possono indicare solo 64 valori, quindi quattro caratteri contengono tre byte. L'output è quindi circa un terzo più grande dell'input, prima ancora che vengano aggiunti eventuali a capo.
Quando i dati non si dividono in gruppi di tre byte, il codificatore completa la fine con segni =. Ma, che è composta da due byte, diventa TWE=, e M, che è un byte, diventa TQ==. Il riempimento indica al decodificatore quanti byte contiene l'ultimo gruppo.
Il testo va prima codificato in UTF-8
Base64 lavora sui byte, mentre il testo è fatto di caratteri. Un carattere come é o ✓ viene memorizzato come più di un byte in UTF-8, la codifica usata su tutto il web. La funzione del browser btoa() prende una stringa e tratta ogni carattere come un byte, quindi fallisce con i caratteri oltre la gamma latina di base. Chiamarla con un segno di spunta genera un errore InvalidCharacterError.
La soluzione è convertire prima il testo in byte UTF-8, poi codificare quei byte. La frase héllo ✓ occupa 10 byte in UTF-8, e il suo Base64 è aMOpbGxvIOKckw==. Lo strumento Base64 svolge questo passaggio per te. Quando decodifica, legge i byte come UTF-8. Se i byte non sono testo UTF-8 valido, lo strumento li tratta come un file e offre il download.
Base64 sicuro per gli URL
L'alfabeto standard contiene + e /. In un URL, + può rappresentare uno spazio, e / separa le parti di un percorso, quindi una stringa Base64 può rompere un link. La forma sicura per gli URL (RFC 4648, sezione 5) usa invece - e _, e di solito omette il riempimento =. Usala quando la stringa finisce in un URL, in un nome di file o in un token. Il decodificatore accetta entrambe le forme, con o senza riempimento.
Se il Base64 proviene da un link, decodifica prima l'URL. Un valore codificato in percentuale in un link va decodificato prima di poter leggere il suo Base64. La guida alla codifica percentuale spiega le regole per i link.
Un caso comune è il token di accesso: un JSON Web Token è composto da tre parti Base64url unite da punti, cioè intestazione, dati e firma. Il decodificatore JWT lo separa e mostra intestazione e dati come JSON leggibile.
Data URL e immagini
Un data URL inserisce il file nel link stesso. La sua forma è data:, poi il tipo di media, poi ;base64, poi una virgola e i dati. Una piccola immagine diventa data:image/png;base64, seguito dai byte codificati. Pagine web e fogli di stile accettano questa forma, che evita una richiesta per un'icona minuscola.
Il costo è la dimensione. I dati sono circa un terzo più grandi e viaggiano dentro la pagina o il foglio di stile, invece di essere un file separato che il browser può mettere in cache. Usa i data URL per immagini piccole, non per foto grandi. Se la foto è pesante, comprimila prima di codificarla.
Quando decodifichi Base64 nello strumento, esso controlla i primi byte dei dati. I file PNG, JPEG, GIF e WebP iniziano ciascuno con una firma nota, quindi lo strumento mostra un'anteprima e offre il download. Anche un data URL con tipo immagine viene mostrato come immagine.
Come usarlo con fixmint
- Scegli Codifica o Decodifica sopra Testo o Base64, quindi incolla il tuo testo o il Base64.
- Spunta Alfabeto sicuro per URL, senza riempimento = per token, nomi di file e link. Il decodificatore accetta comunque entrambe le forme.
- Per creare un data URL da un file, trascinalo nell'area di rilascio e spunta Per i file: restituisci un data URL.
- Copia il risultato. Se i byte decodificati sono un file anziché testo, usa il download offerto dallo strumento.
Errori comuni in decodifica
- Un carattere non è consentito. L'input contiene un carattere fuori dai 64, come una virgoletta presa da una frase copiata. Controlla da dove proviene il testo. Uno spazio di larghezza zero nel testo copiato causa lo stesso errore, quindi rimuovi i caratteri nascosti e riprova. La guida ai caratteri nascosti spiega da dove provengono.
- La lunghezza è sbagliata. Manca o è in più un carattere, di solito perché la copia è stata troncata.
- A capo e spazi. L'email (MIME) va a capo ogni 76 caratteri. Il decodificatore rimuove spazi e a capo, quindi puoi incollare il testo così com'è.
- Riempimento mancante. Alcuni sistemi tolgono i segni =. Il decodificatore li riaggiunge.
Casi limite
- Il risultato decodificato sembra senza senso. Potrebbe trattarsi di un file anziché di testo. Un file zip, un PDF o un programma, decodificati, producono byte che non si leggono come testo. Lo strumento li offre come download.
- Input molto grandi. L'intero file viene tenuto nel browser durante la codifica o la decodifica, quindi un file enorme può essere lento e, su un telefono, può non riuscire.
Risposte rapide
Base64 è la stessa cosa della crittografia?
No. È una codifica reversibile senza chiave, quindi chiunque può decodificarla.
Perché il mio Base64 è più lungo del file?
Ogni gruppo di tre byte diventa quattro caratteri, quindi il testo è circa un terzo più grande.
Perché una stringa Base64 copiata non si decodifica?
Di solito durante la copia è stato perso o aggiunto un carattere, come un a capo nel punto sbagliato o un carattere finale mancante. Copiala di nuovo dalla fonte.
Tradotto dal Originale in inglese con l'assistenza dell'IA.
Commenti
Nessun commento per ora. Sii il primo.


