Hola, me intereso mucho este tema y lo posteare:
"es de la revista eZine FIH nº 1"
Introduccion:
-------------
Esta es una traduccion del texto en Ingles, que pueden encontrar en la
siguiente URL:
http://www.rzweb.com.ar/files/txt/textos/base64.htm
Me dejo de vueltas y empiezo con el texto )
-----------------------------------------------------
A menudo es necesario para algunos servidores web poder autenticar usuarios
para permitir el acceso a directorios de archivos. Hay muchas formas de
hacer esto...la mas comun (y menos segura) es una autenticacion basica. La
autenticacion basica utiliza Base64 para codificar el nombre del usuario y
la contraseña de este modo no hay "clear" text contraseñas volando alrededor
de la red durante conexiones FTP.
Cuando ves con un sniffer el nombre del usuario 'Administrator' y su
contraseña 'pass' aparece como 'QWRtaW5pc3RyYXRvcjpwYXNz'. Cuando se
codifican el userID y su contraseña, se utilizan los dos puntos ( ':' sin
comilla para separlos. Entonces:
'QWRtaW5pc3RyYXRvcjpwYXNz'
Se traduce a:
Administrator:pass
Base64 utiliza un subconjunto de 65 caracteres del US-ASCII, permitiendo 6
bits para cada caracter, entonces el caracter 'm' tiene un valor Base64 de
38, y cuando esta representado en forma binaria, es 100110.
Cuando se codifica una secuencia, vamos a decir 'mne' esto es lo que sucede:
La secuencia de texto se cinvierte en su valor US-ASCII (En US-ASCII a cada
caracter se le asigna un valor):
El carácter "m" tiene el valor decimal de 109
El carácter "n" tiene el valor decimal de 110
El carácter "e" tiene el valor decimal de 101
de este modo 'mne' (una secuencia 3 8-bit-bytes) es 109 110 101 en forma
decimal.
Cuando convertimos esta secuencia a Binario nos queda lo siguiente:
01101101 01101110 01100101
Estos 3 8-bit-bytes se concatenan (se juntan) para hacer una cadena de 24
bit:
011011010110111001100101
Esta cadena de 24 bit la dividiremos en 4 secciones de 6 bit:
011011 010110 111001 100101
Ahora tenemos 4 valores. Estos valores binarios, cuando son convertidos al
sistema Decimal obtenemos lo siguiente:
27 22 57 37
Ahora cada caracter del conjunto de Base64 tiene un valor decimal. Ahora
cambiaremos estos valores decimales por los equivalentes en Base64:
27 = b
22 = W
57 = 5
37 = l
De este modo 'mne' cuando es codificado en Base 64 obtenemos 'bW51'.
Debajo esta la tabla del conjunto de caracteres Base64 con sus valores
Decimales:
Tabla 1: Alfabeto Base64
Valor Codif. Valor Codif. Valor Codif. Valor Codificado
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
Para descifrar una secuencia codificada en Base64 solo debe hacer esto al
reves:
1)Convertir cada caracter a el valor decimal de la tabla Base64.
2)Convertir este valor decimal en binario.
3)Reune los 6 bit binarios de cada caracter en una gran cadena.
4)Separa esta secuencia en grupos de 8 bit (empezando de derecha a
izquierda).
5)Convertir cada valor binario 8-bit en un numero decimal.
6)Convertir este valor decimal en su equivalente US-ASCII.
Listo, ahora todos pueden descifrar una cadena codificada en Base64 )
-----------------------------------------------------
Bueno espero que les sea util esta traduccion, si les parece que hace falta
alguna correccion, o tienen alguna duda, solo consulten, no molestan )
------------------------
By XyborG
xyborg@bigfoot.com
http://www.rzweb.com.ar
------------------------
espero que les sirva, ami me gusto mucho y pienso hacer un programa en C que lo haga, ya ponde el Source Code cuando lo termine.
SALUDOS