Skip to main content

Come funziona la codifica Base64

Come e perché codificare le immagini in Base64 (Aprile 2025)

Come e perché codificare le immagini in Base64 (Aprile 2025)
Anonim

Se Internet è l'autostrada dell'informazione, il percorso per la posta elettronica è una stretta gola. Possono passare solo carrelli molto piccoli.

Il sistema di trasporto dell'e-mail è progettato esclusivamente per testo ASCII semplice. Cercando di inviare testo in altre lingue o file arbitrari è come ottenere un camion attraverso il burrone.

Come il grande camion attraversa la gola?

Allora come si fa a inviare un grosso camion attraverso un piccolo burrone? Devi portarlo a pezzi da un lato, trasportare i pezzi attraverso il burrone e ricostruire il camion dai pezzi all'altro capo.

Lo stesso accade quando si invia un allegato di file via email. In un processo noto come codifica, i dati binari vengono trasformati in testo ASCII, che può essere trasportato via email senza problemi. Alla fine del destinatario, i dati vengono decodificati e il file originale viene ricostruito.

Un metodo per codificare dati arbitrari come testo ASCII semplice è Base64. È una delle tecniche utilizzate dallo standard MIME per inviare dati diversi dal semplice testo.

Base64 to the Rescue

La codifica Base64 richiede tre byte, ciascuno composto da otto bit e li rappresenta come quattro caratteri stampabili nello standard ASCII. Lo fa essenzialmente in due passaggi.

Il primo passo è convertire tre byte in quattro numeri di sei bit. Ogni carattere nello standard ASCII è composto da sette bit. Base64 utilizza solo 6 bit (corrispondenti a 2 ^ 6 = 64 caratteri) per garantire che i dati codificati siano stampabili e leggibili. Non vengono utilizzati i caratteri speciali disponibili in ASCII.

I 64 caratteri (da cui il nome Base64) sono 10 cifre, 26 caratteri minuscoli, 26 caratteri maiuscoli e "+" e "/".

Se ad esempio i tre byte sono 155, 162 e 233, il flusso di bit corrispondente (e spaventoso) è 100110111010001011101001, che a sua volta corrisponde ai valori a 38 bit 38, 58, 11 e 41.

Questi numeri vengono convertiti in caratteri ASCII nel secondo passaggio utilizzando la tabella di codifica Base64. I valori a 6 bit del nostro esempio traducono nella sequenza ASCII "m6Lp".

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> p

Questo processo in due passaggi viene applicato all'intera sequenza di byte codificati. Per garantire che i dati codificati possano essere stampati correttamente e non superino il limite di lunghezza della linea del server di posta, vengono inseriti caratteri di nuova riga per mantenere la lunghezza della linea inferiore a 76 caratteri. I caratteri di nuova riga sono codificati come tutti gli altri dati.

Risolvere il Endgame

Alla fine del processo di codifica, potremmo incorrere in un problema. Se la dimensione dei dati originali in byte è un multiplo di tre, tutto funziona correttamente. Se non lo è, potremmo finire con uno o due byte da 8 bit. Per una corretta codifica, tuttavia, abbiamo bisogno esattamente di tre byte.

La soluzione è di aggiungere abbastanza byte con un valore di '0' per creare un gruppo di 3 byte. Due valori di questo tipo vengono aggiunti se abbiamo un byte di dati in più, uno viene aggiunto per due byte aggiuntivi.

Ovviamente, questi "0" di trascinamento artificiale non possono essere codificati utilizzando la tabella di codifica sottostante. Devono essere rappresentati da un 65 ° personaggio.

Il carattere di riempimento di Base64 è '='. Naturalmente, può comparire solo alla fine dei dati codificati.

Base64 Tabella di codifica

Valorecarbonizzare Valorecarbonizzare Valorecarbonizzare Valorecarbonizzare
0UN 16Q 32g 48w
1B 17R 33h 49X
2C 18S 34io 50y
3D 19T 35j 51z
4E 20U 36K 520
5F 21V 37l 531
6sol 22W 38m 542
7H 23X 39n 553
8io 24Y 40o 564
9J 25Z 41p 575
10K 26un 42q 586
11L 27B 43r 597
12M 28c 44S 608
13N 29d 45t 619
14O 30e 46u 62+
15P 31f 47v 63/