Base64 è un sistema di numerazione posizionale che usa 64 simboli.Viene usato principalmente come codifica di dati binari nelle e-mail, per convertire i dati nel formato ASCII.
L’algoritmo che effettua la conversione suddivide il file in gruppi da 6 bit, i quali possono quindi contenere valori da 0 a 63. Ogni possibile valore viene convertito in un carattere ASCII secondo la seguente tabella:
|
|
|
|
L’algoritmo causa un aumento delle dimensioni dei dati del 33%, poiché ogni gruppo di 3 byte viene convertito in 4 caratteri. Questo supponendo che per rappresentare un carattere si utilizzi un intero byte.
Dati 3 byte che contengono i valori A, B, C, partendo dalla loro rappresentazione binaria, applichiamo l’algoritmo:
Valori decimali: A B C | | | Rappresentazione binaria: 01100001 01100010 01100011 / \ / \ / \ Suddivisione in gruppi da 6 bit: 011000 01 0110 0010 01 100011 |----| |------| |------| |----| I 4 valori dedotti: 011000 010110 001001 100011 \/ \/ \/ \/ Il valore decimale: 24 22 9 35 | | | | Il valore convertito: X V I j
Quindi la sequenza di valori (A, B, C) viene convertita nella sequenza (XVIj)
Nel caso in cui i bit non siano multipli di 6, vengono inseriti bit nulli (0) alla fine, e nella codifica vengono aggiunti da 0 a 2 simboli ‘=’ (padding character) sufficienti a raggiungere un multiplo di 4 simboli. Il padding non è comunque indispensabile per la decodifica. Alcune implementazioni non lo utilizzano.
Quindi, preso un singolo byte di valore (A), esso viene convertito nella sequenza (XV==), il singolo valore (B) viene convertito in (Yg==), mentre la sequenza (A, B) diventa (XVI=)
Una possibile routine di conversione:
union conv { unsigned int l; struct bytes { char b1; char b2; char b3; char b4; } b; }; char convert (char c) { if (c == 63) return 47; else if (c == 62) return 43; else if (c >= 52) return c - 4; else if (c >= 26) return c + 71; else return c + 65; } unsigned int toBase64(char b1, char b2, char b3) { conv src, dest; src.b.b1 = b3; src.b.b2 = b2; src.b.b3 = b1; src.b.b4 = 0; //conv.l == b4 b3 b2 b1 dest.b.b1 = convert(src.b.b1 & 0x3f); src.l = src.l » 6; dest.b.b2 = convert(src.b.b1 & 0x3f); src.l = src.l » 6; dest.b.b3 = convert(src.b.b1 & 0x3f); src.l = src.l » 6; dest.b.b4 = convert(src.b.b1 & 0x3f); return dest.l; }
LINK:
- Implementazione in C per la codifica in Base64
- Online Base64 encoder/decoder
- http://4mhz.de/b64dec.html
E ADESSO DECODIFICA IL CODE BASE64 QUI IN BASSO CLICCANDO IL TASTO DECODE
Benvenuto nel blog di shellx. Qui i bit sono pulsazioni del cuore.
GRAZIE PER LA DECODIFICAZIONE