Base64: codifica e decodifica
Incolla un testo e convertilo in Base64, o incolla una stringa Base64 e riottieni il testo originale. Accenti ed emoji sono gestiti correttamente (UTF-8).
A cosa serve la codifica Base64?
Base64 trasforma qualsiasi sequenza di byte in un testo composto solo da lettere, numeri,
+, / e =. È il formato usato per incorporare immagini nei
CSS e nelle email (data URI), per il campo Authorization: Basic nelle richieste HTTP
e per le due parti di un token JWT. Non è una cifratura: chiunque può decodificarla, serve solo
a trasportare dati binari dove è ammesso soltanto testo.
Perché il supporto UTF-8 è importante
La funzione btoa() del browser, da sola, fallisce con lettere accentate, simboli
come « € » e le emoji, perché accetta solo caratteri a 8 bit. Questo strumento converte prima il
testo in byte UTF-8 con TextEncoder, quindi «perché» ed «🙂» vengono codificati e
decodificati senza errori, con lo stesso risultato che otterresti in Python o in Node.js.
Base64 non è cifratura
È l'equivoco più comune e il più pericoloso: Base64 è una codifica reversibile senza chiave, e chiunque la decodifica in un secondo. Un token, una password o un dato personale «protetti» con Base64 sono in chiaro a tutti gli effetti.
Il suo mestiere è un altro: far passare byte qualsiasi dentro un canale che accetta solo testo. È nata per gli allegati delle email, che possono trasportare solo caratteri stampabili, ed è per questo che oggi si ritrova nei JSON, negli URL e dentro le pagine HTML.
Perché occupa un terzo in più
Base64 prende tre byte alla volta e li scrive come quattro caratteri: da qui il 33% di spazio in più, più l'eventuale riempimento con il segno «=». È un costo fisso e inevitabile, non un difetto dell'implementazione.
Il conto pratico conta quando si incorporano immagini nelle pagine: una foto da 300 kB diventa 400 kB di testo dentro l'HTML, non viene messa in cache separatamente e si riscarica a ogni visita. Ha senso solo per icone piccolissime, dove si risparmia una richiesta di rete.
L'accento che rompe tutto
La funzione btoa() del browser lavora solo su byte fino a 255, quindi fallisce con qualunque carattere fuori dal latino di base: una «è», una «ñ», un'emoji o un ideogramma. Il messaggio d'errore parla di caratteri fuori intervallo, e non dice affatto qual è il problema vero.
La soluzione corretta è convertire prima il testo in byte UTF-8 e poi codificarli, e fare il percorso inverso in decodifica. È il motivo per cui una stringa codificata da un programma può risultare illeggibile in un altro: non è Base64 a divergere, è il passaggio da testo a byte.
Strumenti vicini
Per le immagini c'è la scheda dedicata, Da Base64 a immagine. Per gli indirizzi web, dove servono altre regole di codifica, guarda URL encode e decode, e per verificare l'integrità di un file Checksum di un file.