Skip to main content

Cómo funciona la codificación Base64

COMO ES VIVIR EN UNA TRAILA - MOBILE HOME PREGUNTAS Y RESPUESTAS - PETICION (Abril 2025)

COMO ES VIVIR EN UNA TRAILA - MOBILE HOME PREGUNTAS Y RESPUESTAS - PETICION (Abril 2025)
Anonim

Si Internet es la autopista de la información, la ruta del correo electrónico es un estrecho barranco. Sólo pueden pasar carritos muy pequeños.

El sistema de transporte de correo electrónico está diseñado solo para texto ASCII simple. Tratar de enviar texto en otros idiomas o archivos arbitrarios es como pasar un camión por el barranco.

¿Cómo pasa el Big Truck por el barranco?

Entonces, ¿cómo enviar un camión grande a través de un pequeño barranco? Tienes que hacerlo pedazos en un extremo, transportar las piezas a través del barranco y reconstruir el camión a partir de las piezas en el otro extremo.

Lo mismo sucede cuando envías un archivo adjunto por correo electrónico. En un proceso conocido como codificación, los datos binarios se transforman en texto ASCII, que se puede transportar por correo electrónico sin problemas. Al final del destinatario, los datos se decodifican y el archivo original se reconstruye.

Un método para codificar datos arbitrarios como texto ASCII simple es Base64. Es una de las técnicas empleadas por el estándar MIME para enviar datos que no sean texto sin formato.

Base64 al rescate

La codificación Base64 toma tres bytes, cada uno de ocho bits, y los representa como cuatro caracteres imprimibles en el estándar ASCII. Lo hace esencialmente en dos pasos.

El primer paso es convertir tres bytes a cuatro números de seis bits. Cada carácter en el estándar ASCII consta de siete bits. Base64 solo usa 6 bits (correspondientes a 2 ^ 6 = 64 caracteres) para garantizar que los datos codificados se puedan imprimir y que se puedan leer humanamente. Ninguno de los caracteres especiales disponibles en ASCII se utilizan.

Los 64 caracteres (de ahí el nombre Base64) son 10 dígitos, 26 caracteres en minúscula, 26 caracteres en mayúscula, así como '+' y '/'.

Si, por ejemplo, los tres bytes son 155, 162 y 233, el flujo de bits correspondiente (y aterrador) es 100110111010001011101001, que a su vez corresponde a los valores de 6 bits 38, 58, 11 y 41.

Estos números se convierten a caracteres ASCII en el segundo paso utilizando la tabla de codificación Base64. Los valores de 6 bits de nuestro ejemplo se traducen a la secuencia ASCII "m6Lp".

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> p

Este proceso de dos pasos se aplica a toda la secuencia de bytes codificados. Para garantizar que los datos codificados puedan imprimirse correctamente y no excedan el límite de longitud de línea de ningún servidor de correo, se insertan caracteres de nueva línea para mantener las longitudes de línea por debajo de 76 caracteres. Los caracteres de nueva línea están codificados como todos los demás datos.

Resolviendo el final del juego

Al final del proceso de codificación, podemos encontrarnos con un problema. Si el tamaño de los datos originales en bytes es un múltiplo de tres, todo funciona bien. Si no lo es, podemos terminar con uno o dos bytes de 8 bits. Sin embargo, para una codificación adecuada, necesitamos exactamente tres bytes.

La solución es agregar suficientes bytes con un valor de '0' para crear un grupo de 3 bytes. Dos de estos valores se agregan si tenemos un byte adicional de datos, uno se agrega por dos bytes adicionales.

Por supuesto, estos '0' finales no pueden codificarse usando la siguiente tabla de codificación. Deben estar representados por un personaje número 65.

El carácter de relleno Base64 es '='. Naturalmente, solo puede aparecer al final de los datos codificados.

Tabla de codificación Base64

ValorCarbonizarse ValorCarbonizarse ValorCarbonizarse ValorCarbonizarse
0UNA 16Q 32sol 48w
1segundo 17R 33h 49X
2do 18S 34yo 50y
3re 19T 35j 51z
4mi 20U 36k 520
5F 21V 37l 531
6sol 22W 38metro 542
7H 23X 39norte 553
8yo 24Y 40o 564
9J 25Z 41pag 575
10K 26una 42q 586
11L 27segundo 43r 597
12METRO 28do 44s 608
13norte 29re 45t 619
14O 30mi 46tu 62+
15PAG 31F 47v 63/