Com funciona la codificació Base64

Si Internet és l'autopista de la informació, la ruta d'accés per correu electrònic és un estret barranc. Només es poden passar carros molt petits.

El sistema de transport de correu electrònic només està dissenyat per al text ASCII simple. Intentar enviar text en altres idiomes o fitxers arbitraris és com aconseguir un camió a través del barranc.

Com passa el gran camió a través del barranc?

Llavors, com s'envien un gran camió a través d'un petit barranc? Has de portar-los a trossos per un extrem, transportar les peces pel barranc i reconstruir el camió de les peces a l'altre extrem.

El mateix passa quan envieu un fitxer adjunt per correu electrònic . En un procés conegut com a codificació, les dades binaris es transformen en text ASCII, que es pot transportar en el correu electrònic sense problemes. Al final del destinatari, les dades són descodificades i el fitxer original es reconstrueix.

Un mètode de codificació de dades arbitràries com a text ASCII simple és Base64. És una de les tècniques emprades per l' estàndard MIME per enviar dades que no siguin textures simples .

Base64 al rescat

La codificació Base64 pren tres bytes, cada una de les quals consisteix en vuit bits, i les representa com quatre caràcters imprimibles en l'estàndard ASCII. Fa això en essencialment dos passos.

El primer pas és convertir tres bytes a quatre números de sis bits. Cada caràcter de l'estàndard ASCII està format per set bits. Base64 només utilitza 6 bits (corresponent a 2 ^ 6 = 64 caràcters) per garantir que les dades codificades siguin imprimibles i llegibles humanament. No s'utilitzen cap dels caràcters especials disponibles a ASCII.

Els 64 caràcters (d'aquí el nom Base64) són 10 dígits, 26 caràcters en minúscules, 26 caràcters en majúscula, així com '+' i '/'.

Si, per exemple, els tres bytes són 155, 162 i 233, el flux de bits corresponent (i espantós) és 100110111010001011101001, que al seu torn correspon als valors de 38 bits, 38, 58, 11 i 41.

Aquests números es converteixen a caràcters ASCII en el segon pas mitjançant la taula de codificació Base64. Els valors de 6 bits del nostre exemple es tradueixen a la seqüència ASCII "m6Lp".

Aquest procés de dos passos s'aplica a tota la seqüència de bytes codificats. Per assegurar que les dades codificades es poden imprimir correctament i no superen el límit de la longitud de línia del servidor de correu, s'insereixen caràcters de nova línia per mantenir la longitud de línia inferior a 76 caràcters. Els caràcters de nova línia es codifiquen com totes les altres dades.

Resoldre el joc final

Al finalitzar el procés de codificació, ens podem trobar amb un problema. Si la mida de les dades originals en bytes és múltiple de tres, tot funciona bé. Si no és així, podríem acabar amb un o dos bytes de 8 bits. Per a la codificació correcta, necessitem exactament tres bytes.

La solució és afegir prou bytes amb un valor de '0' per crear un grup de 3 bytes. S'afegeixen dos valors d'aquest tipus si tenim un byte addicional de dades, un s'adjunta per dos bytes addicionals.

Per descomptat, aquests finalitats artificials '0 no es poden codificar utilitzant la taula de codificació a continuació. Han de ser representats per un 65è personatge.

El caràcter de farcit de Base64 és '='. Naturalment, només pot aparèixer al final de les dades codificades.

Base64 taula de codificació

Valor Char Valor Char Valor Char Valor Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 Jo 24 Jo 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 /