style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Base64

Hola a todos, desde aquí les envío un gran saludo como la ostra !

Alguno de ustedes me podría ayudar a decirme para qué usan en sus proyectos el algoritmo de base 64? Veo que es muy frecuentemente usado pero no entiendo mucho para que

Desde ahora gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

codificar

Se usa para codificar datos binarios a texto. Un uso común es para guardar como texto datos cifrados, como una firma digital o la digestión de una contraseña. Puede ser para guardar en base de datos como texto, o para transmitirlos en un formato que solamente acepta texto.

Hay una variante que se puede usar en URL, que en vez de + usa - y en vez de / usa _ de ese modo puedes meter una cadena base64 en un URL sin que algún parser vaya a separar los datos por encontrarse caracteres reservados en URLs.

Repasemos aquello de las

Repasemos aquello de las bases.

Un alfabeto es un conjunto de simbolos. Podemos representar los numeros usando ese alfabeto. Cuando se acaba el alfabeto, incrementamos en uno y volvemos a empezar ( en base 10 cuando llegamos al 9, pasamos al 10 y luego 11, 12 etc. 99, 100, 101, 102 etc )

Los simbolos en base 2 serían: 0 y 1

En base 10 tenemos, 0,1,2,3,4,5,6,7,8,9

En base 16 tenemos, 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

En base 64, tenemos A,B,C,D....X,Y,Z,a,b,c,d...x,y,z,0,1,2...8,9 y otros dos, dan 64 caracteres.

Hasta aquí todo claro no?

Ahora, tenemos que la información se guarda en binario no? Cuando la interpretacion de ese binario se hace utilizando base64 nos devuelve un caracter de ese alfabeto.

Normalmente almacenamos la información en 8 bits ( 8 0's y 1's ) que representan hasta 256 permutaciones, esto es el numero 0 sería (00000000)y el numero 255 sería:(11111111)

Bueeeno pues aquí va lo interesante.

Cualquier numero que guardemos está en en estos 8 bits, pero si lo leemos usando base64 solo se utilizan 6 bits a la vez ( por que 6 bits son los que se necesitan para contar hasta 64 ) por lo que por ejemplo al almacenar 3 numeros de 8 bits podemos leer 4 numeros de 6 bits ( por que 8 x 3 = 24 y 6 x 4 = 24 )

Por ejemplo los numeros: 1 , 1 y 1 usando 8 bits, serían:

[00000001 , 00000001 , 00000001]

Correcto?

Pues al leerlos en base 64 y tomando 6 bits serían:

[000000, 010000, 000100, 000001] No se ha cambiado nada, simplemente se tomaron de 6 en 6 en vez de 8 en 8.

Van de nuevo juntos para compararlos:

12345678 12345678 12345678
00000001,00000001,00000001
000000,010000,000100,000001
123456 123456 123456 123456

Al interpetar estos 4 numeros tenemos:

0, 16 , 4 y 1

Si buscamos en nuestro alfabeto base 64 los numeros 0, 16, 4 y 1 nos dan los simbolos: A,Q, E,B ( 0=A, 16=Q, 4=E, 1=B)

Acá hay otro ejemplo en la Wikipedia

Entonces cuando se codifica en base64, lo que se hace es interpretar el binario y representarlo con la letra correspondiente, que convenientemente resulta ser un caracter imprimible ( de la A-Za-z0-9+- )

Cuando se utiliza ASCII para codificar, hay muchos valores que no son imprimibles ( como del 0 al 32 o algo asi )

Luego entonces, podemos obtener un archivo binario, y codificarlo usando base64, nos da como resultado un monton de letras, que representan la misma informacion.

Esto es precisamente lo que hemos estado usando los ultimos no se cuantos años para adjuntar archivos a los correos ( ver mensaje multiparte ) , por que como el resultado es un montón de caracteres imprimibles, podemos usarlos para representar un archivo binario y mandarlo como un solo mensaje.

Espero no haberlos revuelto más.

Es por el protocolo http

No solo para adjuntar los archivos en correos, las imagenes que vez en las páginas o descargas de archivos desde paginas que esten usando el protocolo http usan este algoritmo para mandar datos binarios como texto a travez de http (recordar q http es un protocolo de texto), En fin cualquier cosa que sea binaria y no texto el servidor la codifica en Base64 para mandarla como texto por http y el browser la decodifica, por eso si hacen un sitio con descargas y pueden usar ftp por mucho mejor porque ese si permite envio en binario.

Imagen de ezamudio

HTTP NO codifica a base64

No, las imágenes y archivos binarios no se codifican a Base64 en HTTP. HTTP no es protocolo de texto (aunque su nombre contenga "texto"). Los encabezados son texto, sí, pero se pueden transmitir datos binarios perfectamente bien; las imágenes y archivos anexos que se transmiten por HTTP no se codifican a base 64.

Para comprobarlo simplemente consigue el URL de una imagen, por ejemplo http://www.javamexico.org/files/zen_logo.png y obtenla por HTTP. Puedes hacerlo desde la linea de comando si tienes el programa curl, o si no con un vil telnet:

telnet www.javamexico.org

GET /files/zen_logo.png HTTP/1.0 (y das dos veces ENTER)

Y me dices si lo que obtienes está codificado en base 64 o no.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">