Come funziona la codifica Base64

Sommario:

Come funziona la codifica Base64
Come funziona la codifica Base64
Anonim

La codifica Base64 è un processo di conversione di dati binari in un formato stringa ASCII convertendo quei 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 a sistemi basati su testo.

Poiché i sistemi basati su testo (come le e-mail) interpretano i dati binari come un'ampia gamma di caratteri, inclusi i caratteri di comando speciali, gran parte dei dati binari che vengono trasmessi al supporto di trasferimento vengono interpretati erroneamente da quei sistemi e vengono persi o danneggiati in il processo di trasmissione.

Image
Image

Un metodo per codificare questo tipo di dati binari in modo da evitare tali problemi di trasmissione è inviarli come semplice testo ASCII 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 interi 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. Nessuno dei caratteri speciali disponibili in ASCII viene utilizzato.

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 65° carattere noto come 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 1001101111010001011101001. Un file binario, come un'immagine, contiene un flusso binario in esecuzione per decine o centinaia di migliaia di zeri e uno.

Un codificatore Base64 inizia suddividendo il flusso binario in raggruppamenti 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 tra caratteri binari (o base-2) in caratteri decimali (base-10) quadrando 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, poi 2^1, poi 2^2, poi 2^3, poi 2^4, poi 2^5.

Ecco un altro modo di vederla. 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: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.

La codifica Base64 prende questa stringa binaria e la suddivide 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.

Utilizzo della 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 spaziatura interna per preservare i segmenti binari di 3 byte alla conversione di file binari in testo utilizzando la tabella Base64, è preservare l'integrità delle informazioni binarie trasmesse.

Tabella di codifica Base64

La tabella seguente traduce tutti i 64 caratteri utilizzati nella codifica Base64.

Tabella di codifica Base64
Valore Car Valore Car Valore Car Valore Car
0 LA 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 Re 19 T 35 j 51 z
4 MI 20 U 36 k 52 0
5 Fa 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 55 3
8 Io 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 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 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Risolvere la fine del gioco

Al termine 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 esserci dei byte vuoti. Per una corretta codifica, sono necessari esattamente 3 byte di dati binari.

La soluzione è aggiungere abbastanza byte con un valore di 0 per creare un gruppo di 3 byte. Due di questi valori vengono aggiunti se i dati necessitano di un byte di dati in più, uno viene aggiunto per due byte extra.

Ovviamente, questi '0 finali artificiali non possono essere codificati utilizzando la tabella di codifica seguente. Devono essere rappresentati da un 65° carattere. Il carattere di riempimento Base64 è il segno di uguale (=) e viene posizionato alla fine dei dati codificati.

Consigliato: