Base64

Base64  es un estándar para codificar datos binarios usando solo 64 caracteres ASCII . El alfabeto de codificación contiene caracteres latinos AZ, az, números 0-9 (62 caracteres en total) y 2 caracteres adicionales según el sistema de implementación. Cada 3 bytes originales se codifican con 4 caracteres (incremento de ¹⁄₃).

Este sistema es muy utilizado en el correo electrónico para representar archivos binarios en el cuerpo del correo electrónico ( codificación de transporte ).

MIME

En formato de correo electrónico MIME Base64 , este es un esquema que convierte una secuencia arbitraria de bytes en una secuencia de caracteres ASCII imprimibles .

Los 62 caracteres estándar se completan +con /y = como un código de sufijo especial.

La especificación completa de esta forma de Base64 se encuentra en RFC 1421 y RFC 2045 . Este esquema se utiliza para codificar una secuencia de octetos ( bytes ).

Para convertir datos a Base64, el primer byte se coloca en los ocho bits más significativos de un búfer de 24 bits, el siguiente en los ocho bits del medio y el tercero en los ocho bits menos significativos. Si se codifican menos de tres bytes, los bits de búfer correspondientes se establecen en cero. Luego, cada seis bits del búfer, comenzando por los más significativos, se utilizan como índices de la cadena "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", y sus caracteres, señalados por los índices, se colocan en la cadena de salida. Si solo se codifican uno o dos bytes, el resultado son solo los primeros dos o tres caracteres de la cadena, y la cadena de salida se rellena con dos o un carácter =. Esto evita que se agreguen bits adicionales a los datos recuperados. El proceso se repite en los datos de entrada restantes.

Por ejemplo, una cita de Leviatán de Thomas Hobbes :

El hombre se distingue, no sólo por su razón, sino por esta singular pasión de otros animales, que es una lujuria de la mente, que por una perseverancia de deleite en la continua e infatigable generación de conocimiento, excede la corta vehemencia de cualquier placer carnal. .

siendo convertido de ASCII a Base64, se ve así:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0 aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1 c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0 aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

En el ejemplo, la palabra Man está codificada como TWFu. El proceso de conversión se puede representar como la siguiente tabla:

Texto de origen METRO a norte
códigos ASCII 77 (0x4d) 97 (0x61) 110 (0x6e)
Vista binaria 0 una 0 0 una una 0 una 0 una una 0 0 0 0 una 0 una una 0 una una una 0
Índice recibido en Base64 19 22 5 46
Resultado final en Base64 T W F tu

Asignación de valores de caracteres Base64

Símbolo Sentido Símbolo Sentido Símbolo Sentido Símbolo Sentido
diez 2 ocho dieciséis diez 2 ocho dieciséis diez 2 ocho dieciséis diez 2 ocho dieciséis
A 0 000000 00 00 q dieciséis 010000 veinte diez gramo 32 100000 40 veinte w 48 110000 60 treinta
B una 000001 01 01 R 17 010001 21 once h 33 100001 41 21 X 49 110001 61 31
C 2 000010 02 02 S Dieciocho 010010 22 12 i 34 100010 42 22 y cincuenta 110010 62 32
D 3 000011 03 03 T 19 010011 23 13 j 35 100011 43 23 z 51 110011 63 33
mi cuatro 000100 04 04 tu veinte 010100 24 catorce k 36 100100 44 24 0 52 110100 64 34
F 5 000101 05 05 V 21 010101 25 quince yo 37 100101 45 25 una 53 110101 sesenta y cinco 35
GRAMO 6 000110 06 06 W 22 010110 26 dieciséis metro 38 100110 46 26 2 54 110110 66 36
H 7 000111 07 07 X 23 010111 27 17 norte 39 100111 47 27 3 55 110111 67 37
yo ocho 001000 diez 08 Y 24 011000 treinta Dieciocho o 40 101000 cincuenta 28 cuatro 56 111000 70 38
j 9 001001 once 09 Z 25 011001 31 19 pags 41 101001 51 29 5 57 111001 71 39
k diez 001010 12 0A a 26 011010 32 1A q 42 101010 52 2A 6 58 111010 72 3A
L once 001011 13 0B b 27 011011 33 1B r 43 101011 53 2B 7 59 111011 73 3B
METRO 12 001100 catorce 0C C 28 011100 34 1C s 44 101100 54 2C ocho 60 111100 74 3C
norte 13 001101 quince 0D d 29 011101 35 1D t 45 101101 55 2D 9 61 111101 75 3D
O catorce 001110 dieciséis 0E mi treinta 011110 36 1E tu 46 101110 56 2E + 62 111110 76 3E
PAGS quince 001111 17 0F F 31 011111 37 1F v 47 101111 57 2F / 63 111111 77 3F

UTF-7

UTF-7 es una versión modificada de Base64. Este esquema de codificación se utiliza para archivos UTF-16 como formato intermedio en MIME. UTF-7 está diseñado para usarse con Unicode en correo electrónico sin codificación de transporte de contenido. La principal diferencia entre esta variante de Base64 y MIME es que el carácter =no se usa para relleno, ya que el carácter debe escaparse varias veces. En cambio, los bits del octeto se rellenan con ceros.

El Base64 modificado está estandarizado de acuerdo con RFC 2152 ( A Mail-Safe Transformation Format of Unicode ).

IRCU

En el protocolo de servidor a servidor utilizado por IRC y software compatible, la versión Base64 se utiliza para codificar direcciones IP binarias y numéricas de cliente/servidor. Los datos numéricos del cliente y del servidor tienen tamaños fijos que coinciden exactamente con el número de caracteres Base64, por lo que no es necesario rellenar. Las direcciones IP binarias se expanden con ceros iniciales para que coincidan. El conjunto de caracteres difiere ligeramente de MIME al usar []en lugar de +/.

Aplicación en aplicaciones web

Gracias a Base64, se puede incluir contenido binario en documentos html, creando un solo documento sin imágenes separadas y otros archivos adicionales. Así, un documento html con gráficos, audio, vídeo, programas, estilos y demás añadidos incluidos en él se convierte en una excelente alternativa a otros formatos de documentos complejos como doc, docx, pdf.

Algunas aplicaciones codifican datos binarios para incluirlos fácilmente en URL, campos de formulario ocultos.

El uso de un codificador de URL sobre el estándar Base64 no siempre es conveniente, ya que convierte caracteres /y +secuencias hexadecimales especiales. Aunque esta conversión es reversible, alarga la cadena y la hace un poco más difícil de analizar más adelante. Además, es posible que el carácter %generado por el codificador de URL deba escaparse nuevamente al pasar la cadena resultante a través de otros sistemas (por ejemplo, en SQL es un elemento de plantilla).

Por esta razón, existe un Base64 modificado para URL , donde no se utilizan relleno de caracteres =ni símbolos y se reemplazan por +y respectivamente . Por lo tanto, el uso de codificadores/descodificadores de URL ya no es necesario y no tiene efecto sobre la longitud del valor codificado, dejando intacta la misma forma codificada para su uso en bases de datos relacionales, formularios web e identificadores de objetos en general. La codificación Base64 de URL reconoce la variante cuando los caracteres y se reemplazan, respectivamente, con y ( RFC 3548 , sección 4). /*-+/-_

La otra variante se llama Base64 modificada para expresiones regulares y usa !y -en lugar de *y -, para reemplazar el Base64 estándar +/, porque tanto +y *pueden reservarse para expresiones regulares (tenga en cuenta que el []uso anterior en la variante IRCu puede no funcionar en este contexto).

Hay otras opciones que usan _and -o .y _si la cadena Base64 se va a usar junto con identificadores para programas, o .y -para usar en tokens de nombre XML ( Nmtoken ), o _en :identificadores XML más limitados ( Name ). En algunos casos, la URL usa Base58 , que no usa los caracteres +y /.

Base58

Base58 se usa para codificar URL en algunos sistemas, que se diferencia de Base64 en la ausencia de caracteres en el texto final que una persona pueda percibir de manera ambigua. Se excluyen 0 (cero), O ( o latina mayúscula ), I ( i latina mayúscula ), l ( L latina minúscula ) . También se excluyen los caracteres + (más) y / (barra oblicua), que, al codificar una URL , pueden dar lugar a una interpretación incorrecta de la dirección.

Radix-64

Radix-64 es una variación de la codificación Base64 de datos binarios a formato de texto que se usa en PGP . Se diferencia de Base64 en que se agrega una suma de verificación de 24 bits al final.

Los sistemas operativos basados ​​en Unix almacenan hash de contraseñas calculados con crypt en el archivo /etc/passwd utilizando la codificación B64 . Es similar a Radix-64, pero =no se usa el sufijo de alineación y en el alfabeto, los caracteres no alfabéticos se colocan al principio: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.

Otros usos

Hay muchos usos para Base64. Por ejemplo, Thunderbird y Mozilla Suite usaban Base64 para ocultar contraseñas en POP3 . Base64 se puede usar como un método para ocultar secretos sin la sobrecarga de la administración de claves criptográficas ; sin embargo, este enfoque es completamente inseguro y no se recomienda.

Los escáneres de spam que no decodifican los mensajes en Base64 a menudo los pasan por alto, ya que estos mensajes parecen lo suficientemente aleatorios como para confundirlos con spam. Los spammers lo utilizan para eludir las herramientas antispam básicas.

Este estándar se utiliza para codificar imágenes JPEG y PNG, para insertarlas en libros electrónicos FB2 [1] .

Hay aplicaciones que utilizan la codificación Base64 para enviar imágenes pequeñas a través de SMS largos [2] .

Notas

  1. El elemento binario es FictionBook . libro de ficción.org. Consultado el 23 de septiembre de 2019. Archivado desde el original el 22 de septiembre de 2019.
  2. Imagen SMS | F-Droid: repositorio de aplicaciones de Android gratuito y de código abierto . f-droid.org . Consultado el 23 de abril de 2021. Archivado desde el original el 23 de abril de 2021.

Enlaces

Codificación y decodificación en línea