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 ).
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 |
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 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 ).
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 +/.
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 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 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.
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] .
serialización | Formatos de datos digitales de|
---|---|
Texto | |
Internet y telecomunicaciones |
|
Medios de comunicación | |
Otro |