La codifica base64

Spread the love

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.

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.