viernes, 4 de enero de 2008

Codificación Base64

La codificación Base64 se emplea para transferir bytes en forma codificada por Internet .

Uno se sus usos es el de codificar el nombre de usuario y clave de acceso en los servicios de correo. También se puede emplear para enviar imágenes y otros archivos binarios por correo electrónico.

Se debe tener en cuenta que Base 64 no es una forma de “cifrado” de la información ya que cualquiera puede leer la información así codificada.

Se trata de leer de 3 en 3 los bytes de la información que deseo convertir, que puede ser una imágen, un texto, un archivo binario, etc. y hacer bloques de 6 bits empezando por la izquierda, de manera que el primer Byte codificado estará compuesto por los 6 bits más altos del byte, el segundo Byte codificado estará compuesto por los 2 bits más bajos del primer byte y los 4 Bits más altos del segundo Byte... y así hasta que nos quedan 6 Bits libres que serán los del cuarto Byte codificado.

3 bytes ASCII se convierten en 4 bytes Base64

Los bytes codificados siempre deben terminar en grupos de 4 bytes. Por ejemplo, si codificamos 123, obtenemos MTIz que es la codificación Base64 de 123. Pero si queremos codificar 1 obtendremos MQ== ya que siempre deben completarse los 4 caracteres, se agregan dos signos = como relleno. Si codificamos 12, obtendremos MTI= con un carácter = de relleno.


00 A 16 Q 32 g 48 w
01 B 17 R 33 h 49 x
02 C 18 S 34 i 50 y
03 D 19 T 35 j 51 z
04 E 20 U 36 k 52 0
05 F 21 V 37 l 53 1
06 G 22 W 38 m 54 2
07 H 23 X 39 n 55 3
08 I 24 Y 40 o 56 4
09 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 /

¿Cómo se hace?

Como ejemplo, vamos a codificar el 1 ASCII en Base64. El uno corresponde al valor ASCII 49, o lo que es lo mismo en binario 00110001. Le saco los primeros 6 bits 001100 o lo que es lo mismo en decimal 12, buscamos 12 en la tabla y obtenemos M. Pero aún me queda 01 (recordemos que partimos de 8 bits y tomamos 6). Nos restaba 01, lo rellenamos con ceros para llegar a 6 bits y nos queda 010000 o lo que es lo mismo en decimal 16. Buscamos el 16 en la tabla y obtenemos Q. Pero como las reglas dicen que los caracteres de Base64 deben venir en grupos de 4, le completamos los dos que faltan con caracteres de relleno (el signo igual “=”). Y nos queda MQ==

En este blog, sobre la derecha pueden encontrar un traductor de Código 64 a ASCII y viceversa, úsenlo para verificar la implementación que realicen en Visual Basic o en Excel. También pueden usarlo para probar su destreza en la decodificación "manual".

Que tengan un gran día,

Sergio Otaño

0 comentarios: