Come funziona la codifica Base64
La codifica Base64 è un processo di conversione di dati binari in un formato stringa ASCII convertendo tali dati binari in una rappresentazione di caratteri a 6 bit. Il metodo di codifica Base64 viene utilizzato quando i dati binari, come immagini o video, vengono trasmessi su sistemi progettati per trasmettere dati in un formato di testo normale (ASCII).
Perché viene utilizzata la codifica Base64?
La necessità della codifica Base64 deriva dai problemi che si verificano quando i media vengono trasmessi in formato binario grezzo ai sistemi testuali.
Poiché i sistemi basati su testo (come e-mail) interpretano i dati binari come un'ampia gamma di caratteri, inclusi caratteri di comando speciali, gran parte dei dati binari che viene trasmesso ai supporti di trasferimento viene interpretato erroneamente da tali sistemi e perso o danneggiato durante la trasmissione processi.

Un metodo per codificare questo tipo di dati binari in modo da evitare tali problemi di trasmissione è inviarlo come testo ASCII semplice in formato codificato Base64. Questa è una delle tecniche impiegate dallo standard MIME per inviare dati diversi dal testo normale.
Molti linguaggi di programmazione, come PHP e Javascript, includono funzioni di codifica e decodifica Base64 per interpretare i dati trasmessi utilizzando la codifica Base64.
Logica di codifica Base64
La codifica Base64 suddivide i dati binari in segmenti a 6 bit di 3 byte completi e li rappresenta come caratteri stampabili nello standard ASCII. Lo fa essenzialmente in due passaggi.
Il primo passo è suddividere la stringa binaria in blocchi da 6 bit. Base64 utilizza solo 6 bit (corrispondenti a 2^6 = 64 caratteri) per garantire che i dati codificati siano stampabili e leggibili dall'uomo. Non viene utilizzato nessuno dei caratteri speciali disponibili in ASCII.
I 64 caratteri (da cui il nome Base64) sono 10 cifre, 26 caratteri minuscoli, 26 caratteri maiuscoli oltre al segno più (+) e alla barra (/). C'è anche un 65esimo personaggio noto come a pad, che è il segno di uguale (=). Questo carattere viene utilizzato quando l'ultimo segmento di dati binari non contiene 6 bit completi.
Esempio di codifica Base64
Ad esempio, prendi tre numeri ASCII 155, 162 e 233. Questi tre numeri costituiscono un flusso binario di 100110111010001011101001. Un file binario, come un'immagine, contiene un flusso binario in esecuzione per decine o centinaia di migliaia di zero e uno.
Un codificatore Base64 inizia suddividendo il flusso binario in gruppi di sei caratteri: 100110 111010 001011 101001. Ciascuno di questi raggruppamenti si traduce nei numeri 38, 58, 11 e 41.
Un flusso binario di sei caratteri converte i caratteri binari (o in base 2) in caratteri decimali (in base 10) elevando al quadrato ogni valore rappresentato da un 1 nella sequenza binaria con il suo quadrato posizionale. Partendo da destra e spostandosi a sinistra, e partendo da zero, i valori nel flusso binario rappresentano 2^0, quindi 2^1, quindi 2^2, quindi 2^3, quindi 2^4, quindi 2^5.
Ecco un altro modo di vederlo. Partendo da sinistra, ogni posizione vale 1, 2, 4, 8, 16 e 32. Se il numero binario ha un 1 nello slot, aggiungi quel valore; se ha uno 0 nello slot, non lo fai. La stringa binaria 100110 viene convertita nel numero decimale 38: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2 +4+0+0+32.
La codifica Base64 prende questa stringa binaria e la scompone nei valori a 6 bit 38, 58, 11 e 41.
Infine, questi numeri vengono convertiti in caratteri ASCII utilizzando la tabella di codifica Base64. I valori a 6 bit di questo esempio si traducono nella sequenza ASCII m6Lp.
Utilizzando la tabella di conversione Base64:
- 38 è m
- 58 è 6
- 11 è L
- 41 è p
Questo processo in due fasi viene applicato all'intera stringa binaria codificata.
Per garantire che i dati codificati possano essere stampati correttamente e non superino il limite di lunghezza della riga del server di posta, vengono inseriti caratteri di nuova riga per mantenere la lunghezza della riga inferiore a 76 caratteri. I caratteri di nuova riga sono codificati come tutti gli altri dati.
L'intero scopo della codifica Base64, dall'aggiunta di padding per preservare i segmenti binari a 3 byte a convertire binario in testo usando la tabella Base64, è preservare l'integrità del binario trasmesso informazione.
Tabella di codifica Base64
La tabella seguente traduce tutti i 64 caratteri utilizzati nella codifica Base64.
Tabella di codifica Base64 | |||||||
---|---|---|---|---|---|---|---|
Valore | Char | Valore | Char | Valore | Char | Valore | Char |
0 | UN | 16 | Q | 32 | G | 48 | w |
1 | B | 17 | R | 33 | h | 49 | X |
2 | C | 18 | S | 34 | io | 50 | sì |
3 | D | 19 | T | 35 | J | 51 | z |
4 | E | 20 | tu | 36 | K | 52 | 0 |
5 | F | 21 | V | 37 | io | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | h | 23 | X | 39 | n | 55 | 3 |
8 | io | 24 | sì | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | P | 57 | 5 |
10 | K | 26 | un | 42 | Q | 58 | 6 |
11 | l | 27 | B | 43 | R | 59 | 7 |
12 | m | 28 | C | 44 | S | 60 | 8 |
13 | n | 29 | D | 45 | T | 61 | 9 |
14 | oh | 30 | e | 46 | tu | 62 | + |
15 | P | 31 | F | 47 | v | 63 | / |
Risolvere l'Endgame
Alla fine del processo di codifica, potrebbe esserci un problema. Se la dimensione dei dati originali in byte è un multiplo di tre, tutto funziona correttamente. In caso contrario, potrebbero essere presenti byte vuoti. Per una codifica corretta, sono necessari esattamente 3 byte di dati binari.
La soluzione consiste nell'aggiungere byte sufficienti con un valore 0 per creare un gruppo di 3 byte. Due di questi valori vengono aggiunti se i dati richiedono un byte di dati in più, uno viene aggiunto per due byte in più.
Naturalmente, questi "0" artificiali non possono essere codificati utilizzando la tabella di codifica sottostante. Devono essere rappresentati da un 65esimo carattere. Il carattere di riempimento Base64 è il segno di uguale (=) e viene posizionato alla fine dei dati codificati.