Una guida pratica a Base64: bit, riempimento e validazione

Segui i byte attraverso gruppi a sei bit, calcola la dimensione dell'output e distingui i problemi di formattazione canonici Base64 dai problemi di formattazione recuperabili.

Base64 è una rappresentazione di byte che utilizza un alfabeto di testo limitato. È utile quando un trasporto accetta testo ma il carico utile è binario. L'operazione è reversibile: un decodificatore corretto recupera i byte originali, compresi zeri e valori che non sono caratteri validi. Scegliere come interpretare quei byte è un passaggio separato.

Tre byte diventano quattro caratteri

Un byte contiene otto bit. Tre byte forniscono 24 bit, che si dividono equamente in quattro gruppi di sei. Ciascun gruppo seleziona uno dei 64 caratteri dell'alfabeto. L'alfabeto standard contiene lettere maiuscole, lettere minuscole, cifre, più e barra. Per il testo ASCII Man, i byte sono 4d 61 6e in esadecimale e l'output codificato è TWFu.

Input bytes:  01001101 01100001 01101110
Six-bit sets: 010011 010110 000101 101110
Indexes:      19     22     5      46
Output:       T      W      F      u

Il riempimento descrive il gruppo finale

Quando rimane un byte, l'output contiene due caratteri alfabetici e due segni di uguale. I due byte rimanenti producono tre caratteri alfabetici e un segno di uguale. Così M diventa TQ==, mentre Ma diventa TWE=. Il padding fa parte della struttura: aggiungere segni di uguale casuali non recupera un carattere mancante dei dati. Per una codifica canonica, anche i bit inutilizzati dell’ultimo carattere dell’alfabeto devono essere zero.

Per n byte in ingresso, l’output con padding contiene 4 × ceil(n / 3) caratteri. Un file di 1.024 byte produce quindi 1.368 caratteri prima di aggiungere un prefisso Data URI o interruzioni di riga. Base64 non comprime i dati, anche se un livello di compressione separato per il trasporto può ridurre la dimensione finale del trasferimento.

Convalidare prima di interpretare

Utilizza la modalità rigorosa quando testi un produttore rispetto a un protocollo definito. Utilizza la modalità compatibilità quando un'origine nota ha inserito interruzioni di riga ASCII, omesso il riempimento o incluso un wrapper dati URI. Rivedere le regolazioni registrate. La punteggiatura inaspettata, gli alfabeti misti e i bit inutilizzati diversi da zero meritano un'indagine, non una cancellazione silenziosa.

Infine, ispeziona i byte decodificati. Base64 valido può contenere una sequenza UTF-8 non valida, un'immagine troncata o una sequenza PDF incompleta. Una decodifica riuscita dimostra solo il livello di codifica. Salva i risultati binari come byte e utilizza il parser di file appropriato per controllarne la struttura. Le regole dell'alfabeto, del riempimento e dei bit canonici sono specificate in RFC 4648.