Cómo funciona la codificación Base64

Base64 protege los datos binarios contra la corrupción en transferencias solo ASCII La codificación Base64 es un proceso de conversión de datos binarios a un formato de cadena ASCII al convertir esos datos binarios en una representación de caracteres de 6 bits.

Base64 protege los datos binarios contra la corrupción en transferencias solo ASCII

La codificación Base64 es un proceso de conversión de datos binarios a un formato de cadena ASCII al convertir esos datos binarios en una representación de caracteres de 6 bits. El método de codificación Base64 se utiliza cuando los datos binarios, como imágenes o videos, se transmiten a través de sistemas diseñados para transmitir datos en formato de texto sin formato (ASCII).

¿Por qué se utiliza la codificación Base64?

La necesidad de codificación Base64 proviene de los problemas que ocurren cuando los medios se transmiten en formato binario sin formato a sistemas basados ​​en texto.

Dado que los sistemas basados ​​en texto (como el correo electrónico) interpretan los datos binarios como una amplia gama de caracteres, incluidos los caracteres de comandos especiales, gran parte de los datos binarios que se transmiten a los medios de transferencia son mal interpretados por esos sistemas y se pierden o corrompen en el proceso de transmisión.

Un método para codificar este tipo de datos binarios de una manera que evite tales problemas de transmisión es enviarlo como texto ASCII en formato codificado Base64. Esta es una de las técnicas empleadas por el estándar MIME para enviar datos que no sean texto sin formato.

Muchos lenguajes de programación, como PHP y Javascript, incluyen funciones de codificación y decodificación Base64 para interpretar los datos transmitidos utilizando la codificación Base64.

Lógica de codificación Base64

La codificación Base64 divide los datos binarios en segmentos de 6 bits de 3 bytes completos y los representa como caracteres imprimibles en el estándar ASCII. Lo hace esencialmente en dos pasos.

El primer paso es dividir la cadena binaria en bloques de 6 bits. Base64 solo usa 6 bits (correspondientes a 2 ^ 6 = 64 caracteres) para garantizar que los datos codificados sean imprimibles y legibles por humanos. No se utiliza ninguno de los caracteres especiales disponibles en ASCII.

Los 64 caracteres (de ahí el nombre Base64) son 10 dígitos, 26 caracteres en minúscula, 26 caracteres en mayúscula, así como el signo más (+) y la barra diagonal (/). También hay un carácter número 65 conocido como pad , que es el signo de igual (=). Este carácter se usa cuando el último segmento de datos binarios no contiene 6 bits completos.

Ejemplo de codificación Base64

Por ejemplo, tome tres números ASCII 155, 162 y 233. Estos tres números constituyen una secuencia binaria de 100110111010001011101001. Un archivo binario, como una imagen, contiene una secuencia binaria que se ejecuta por decenas o cientos de miles de ceros y unos.

Un codificador Base64 comienza fragmentando el flujo binario en agrupaciones de seis caracteres: 100110 111010 001011 101001. Cada una de estas agrupaciones se traduce en los números 38, 58, 11 y 41.

Una secuencia binaria de seis caracteres convierte entre caracteres binarios (o base-2) a decimales (base-10) al cuadrar cada valor representado por un 1 en la secuencia binaria con su cuadrado posicional. Comenzando desde la derecha y moviéndose hacia la izquierda, y comenzando con cero, los valores en el flujo binario representan 2 ^ 0, luego 2 ^ 1, luego 2 ^ 2, luego 2 ^ 3, luego 2 ^ 4, luego 2 ^ 5.

Aquí hay otra forma de verlo. Comenzando desde la izquierda, cada posición vale 1, 2, 4, 8, 16 y 32. Si el número binario tiene un 1 en la ranura, agrega ese valor; si tiene un 0 en la ranura, no lo tienes. La cadena binaria 100110 se convierte al número decimal 38: 0 * 2 ^ 01 + 1 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 = 0 + 2 + 4 + 0 + 0 + 32.

La codificación Base64 toma esta cadena binaria y la divide en los valores de 6 bits 38, 58, 11 y 41.

Finalmente, estos números se convierten en caracteres ASCII utilizando la tabla de codificación Base64. Los valores de 6 bits de este ejemplo se traducen en la secuencia ASCII m6Lp .

Usando la tabla de conversión Base64:

  • 38 es m
  • 58 es 6
  • 11 es L
  • 41 es p

Este proceso de dos pasos se aplica a toda la cadena binaria que está codificada.

Para garantizar que los datos codificados se puedan imprimir correctamente y no excedan el límite de longitud de línea del 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 se codifican como todos los demás datos.

El propósito completo de la codificación Base64, desde agregar relleno para preservar segmentos binarios de 3 bytes hasta convertir binario a texto usando la tabla Base64, es preservar la integridad de la información binaria transmitida.

Tabla de codificación Base64

La siguiente tabla traduce los 64 caracteres utilizados en la codificación Base64.

Tabla de codificación Base64
Value Char Value Char Value Char Value 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 I 24 Y 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 /

Resolviendo el juego final

Al final del proceso de codificación, puede haber un problema. Si el tamaño de los datos originales en bytes es un múltiplo de tres, todo funciona bien. Si no es así, puede haber bytes vacíos. Para una codificación adecuada, se necesitan exactamente 3 bytes de datos binarios.

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

Por supuesto, estos ‘0’ finales artificiales no pueden codificarse utilizando la tabla de codificación a continuación. Deben estar representados por un personaje 65. El carácter de relleno Base64 es el signo de igual (=) y se coloca al final de los datos codificados.

Rate article
labsfabs.com
Add a comment