Questa codifica permette di rappresentare file binari (o anche file di testo) in un formato che usa una base di soli 64 caratteri scelti tra i 128 caratteri dell’ASCII standard 7 bit: quale insieme? dipende dalla particolare implementazione, ma fondamentalmente sono
- i 26 caratteri Maisuscoli [A-Z], seguiti
- dai 26 caratteri minuscoli [a-z], seguiti
- dalle 10 cifre [0-9] e
- dai segni + [più] e / [slash]
È una tabella composta quindi di 26+26+10+2 = 64 caratteri.
A cosa è dovuto questo che potrebbe sembrare un arzigogolo inutile?
La posta elettronica si basa su questa codifica, per esempio: gli allegati alla mail, quale che sia il loro tipo MIME (sia esso un pdf, un breve video o un audio), vengono convertiti in TESTO puro.
Perché la trasmissione di mail è su base TESTUALE, si trasmette testo. Così anche HTTP: Hyper TEXT Transfer Protocol. Le immagini e i file multimediali in genere che viaggiano su HTTP vengono precedentemente convertite in TESTO.
Lo schema di codifica è il seguente: supponiamo di dover trasmettere con un protocollo di testo (SMTP o HTTP) la stringa “CIAO”.
Prendiamo per ciascun carattere la corrispondente codifica ASCII in binario e ne raggruppiamo le cifre 6 a 6:
Algoritmo per la determinazione dei caratteri base64
Quindi 0 viene mappato in A, 1 in B e così via, fino 61 che viene mappato sul carattere 9, più 62 mappato in + e 63 in /
L’algoritmo prevede che il numero di bit debba essere multiplo di 6, per cui eventualmente si opera un padding (i 4 zeri verdi nel nostro caso); inoltre il numero di caratteri dev’essere multiplo di 4 per cui u questo caso si aggiungono da 0 a due caratteri =.
Varie implementazioni ritornano valori finali leggermente diversi: ad esempio, per evitare problemi inserendo una stringa base64 nell’URL, è necessario evitare il carattere /.
Nella mia implementazione Ubuntu:
$ base64 --version base64 (GNU coreutils) 8.23 Copyright © 2014 Free Software Foundation, Inc. Licenza GPLv3+: GNU GPL versione 3 o successive <http://gnu.org/licenses/gpl.html> Questo è software libero: è possibile modificarlo e ridistribuirlo. Non c'è ALCUNA GARANZIA, nei limiti permessi dalla legge. Scritto da Simon Josefsson.
il risultato è
$ echo CIAO | base64
Q0lBTwo=
il padding, in questa implementazione, viene fatto con o=.
Per una immagine il procedimento è lo stesso: si prendono i bytes, si raggruppano per 6, si converte nei caratteri della tabella A-Za-z0-9+/ più eventuale padding
- di zeri per arrivare ad un numero di bit multiplo di 6 e
- di caratteri per arrivare ad un numero di caratteri multiplo di 4.
Commenti recenti