Vai al contenuto principale
riqo.ioStrumenti per grandi idee

Base64: codifica binaria in formato testuale

Come Base64 trasforma byte in testo ASCII, perché aumenta la dimensione e quali varianti usare nei diversi protocolli.

Perché esiste Base64

Molti protocolli e formati storicamente gestiscono in modo più affidabile testo che byte arbitrari. Base64 rappresenta dati binari usando un alfabeto ASCII ristretto, così il contenuto può attraversare canali testuali senza essere interpretato come controllo o delimitatore.

La codifica non comprime e non nasconde i dati. È una trasformazione reversibile della rappresentazione, utile per compatibilità e trasporto, non una misura di sicurezza.

Blocchi da 24 bit e alfabeto da 64 simboli

Base64 legge tipicamente tre byte, cioè 24 bit, e li divide in quattro gruppi da 6 bit. Ogni gruppo seleziona uno dei 64 simboli dell'alfabeto, producendo quattro caratteri testuali per tre byte di input.

Da questa proporzione deriva un overhead di circa un terzo, a cui possono aggiungersi padding, interruzioni di riga o contenitori di protocollo. Per file grandi è quindi spesso preferibile un trasporto binario nativo.

Padding e lunghezze non multiple di tre

Se gli ultimi dati non completano tre byte, la codifica standard usa uno o due caratteri = come padding per mantenere blocchi di quattro simboli. Il padding segnala quanti byte significativi erano presenti nell'ultimo blocco.

Alcuni protocolli omettono il padding quando la lunghezza può essere ricostruita dal contesto. Encoder e decoder devono concordare la variante, soprattutto quando i dati vengono firmati o confrontati in forma testuale.

Base64 standard e Base64url

L'alfabeto standard usa + e /, caratteri scomodi in URL e filename. Base64url li sostituisce con - e _, riducendo la necessità di ulteriori escaping in contesti web.

Le due varianti rappresentano gli stessi bit ma non sono sempre intercambiabili come stringhe. È buona pratica documentare alfabeto e policy del padding in ogni confine tra sistemi.

Testo, UTF-8 e dati binari

Quando si codifica una stringa, Base64 non lavora direttamente sui caratteri astratti ma sui byte prodotti dall'encoding, normalmente UTF-8. La stessa sequenza di caratteri codificata con encoding differenti può quindi generare Base64 differente.

Per immagini, archivi o chiavi il dato è già binario e non serve interpretarlo come testo. Dopo la decodifica, i byte vanno trattati secondo il formato originario e non automaticamente come UTF-8.

Cosa Base64 non garantisce

Chiunque disponga della stringa può decodificarla: non offre confidenzialità, autenticità o integrità. Per proteggere dati servono primitive crittografiche appropriate, come cifratura autenticata o MAC.

Evita inoltre catene di codifica ripetute senza necessità. Specifica chiaramente il formato a monte e a valle e usa Base64 solo quando il canale richiede una rappresentazione testuale dei byte.