La codificación de binario a texto es un esquema de codificación de datos que representa datos binarios como texto plano . Generalmente, los datos binarios consisten en una secuencia de valores arbitrarios de bytes de 8 bits (también llamados octetos ) y el texto se limita a los códigos de caracteres imprimibles de codificaciones de caracteres de uso común, como ASCII . Por lo general, los datos binarios arbitrarios contienen valores que no son códigos de caracteres imprimibles, por lo que el software diseñado para manejar solo texto no puede procesar dichos datos. Codificar datos binarios como texto permite que la información que no se almacena inherentemente como texto sea procesada por software que de otro modo no podría procesar datos binarios arbitrarios. El software no puede interpretar la información, pero puede realizar operaciones útiles sobre los datos, como transmitir y almacenar .
La documentación de PGP ( RFC 9580 ) utiliza el término "armadura ASCII" para la codificación de binario a texto cuando se refiere a Base64 .
Conceptualmente, la codificación de binario a texto difiere de la representación numérica para una base numérica ( radix ). Por ejemplo, el sistema decimal es un esquema para representar un valor en base 10, pero no es una codificación de binario a texto. Se podría diseñar una codificación de binario a texto que utilizara la representación decimal para los datos codificados, pero dicho sistema solo usaría 10 valores de una secuencia codificada de 4 bits, dejando 6 valores sin usar. Una codificación más eficiente usaría los 16 valores. Esta es la Base16, que utiliza el sistema hexadecimal para codificar cada secuencia de 4 bits. Cabe destacar que, dado que 16 es una potencia de dos , Base16 y el sistema hexadecimal son indistinguibles en la práctica, aunque difieren conceptualmente.
Las codificaciones de escape, como la codificación porcentual y la codificación de texto entre comillas, también permiten representar datos binarios arbitrarios como texto, pero de una manera significativamente diferente. Una codificación de binario a texto implica codificar toda la secuencia de entrada, mientras que una codificación de escape permite incrustar datos binarios en datos que ya son, por naturaleza, texto.
Usar
Transmisión de datos binarios como texto
La codificación binaria a texto permite transmitir datos a través de un canal de comunicación que no admite datos binarios arbitrarios (como el correo electrónico o NNTP ) o que no es de 8 bits . Esta codificación permite transmitir datos binarios mediante un protocolo de comunicación diseñado para transmitir texto legible (por ejemplo, en inglés). A menudo, dicho protocolo solo admite valores de caracteres de 7 bits (y, dentro de este rango, omite ciertos códigos de control), puede requerir saltos de línea a intervalos máximos determinados y puede no mantener espacios en blanco . Por lo tanto, solo los 94 caracteres ASCII imprimibles son seguros para transmitir datos.
El estándar de codificación de texto ASCII utiliza 7 bits para codificar caracteres. Con esto es posible codificar 128 (es decir, 2 7 ) valores únicos (0–127) para representar los caracteres alfabéticos, numéricos y de puntuación comúnmente utilizados en inglés , además de una selección de caracteres de control no imprimibles . Por ejemplo, la letra mayúscula A se representa como 65 (41 16 , 100 0001 2 ), el número 2 es 50 (32 16 , 011 0010 2 ), la llave derecha } es 125 (7D 16 , 111 1101 2 ), y el carácter de control de retorno de carro CR es 13 (0D 16 , 000 1101 2 ).
En cambio, la mayoría de los ordenadores almacenan datos en memoria organizados en bytes de ocho bits (también conocidos como octetos ). Los archivos que contienen código ejecutable y datos no textuales suelen contener los 256 valores posibles de bytes de ocho bits. Muchos programas informáticos llegaron a depender de esta distinción entre texto de siete bits y datos binarios de ocho bits , y no funcionarían correctamente si aparecieran caracteres no ASCII en datos que se esperaba que contuvieran solo texto ASCII. Por ejemplo, si no se conserva el valor del octavo bit, el programa podría interpretar un valor de byte superior a 127 como una señal para que realice alguna función.
A menudo se desea enviar datos no textuales a través de un sistema basado en texto, como adjuntar una imagen a un correo electrónico. Para ello, los datos se codifican de alguna manera, de modo que los datos de 8 bits se codifican como caracteres ASCII de 7 bits (generalmente utilizando solo caracteres alfanuméricos y de puntuación, los caracteres imprimibles ASCII). Al llegar a su destino, se decodifican de nuevo a su formato de 8 bits. Este proceso se conoce como codificación binaria a texto. Muchos programas realizan esta conversión para permitir la transmisión de datos, como PGP y GNU Privacy Guard .
Codificación de texto plano
Los métodos de codificación de binario a texto también se utilizan como mecanismo para codificar texto plano . Algunos sistemas tienen un conjunto de caracteres más limitado que pueden manejar; no solo no son de 8 bits , sino que algunos ni siquiera pueden manejar todos los caracteres ASCII imprimibles. Otros sistemas tienen límites en la cantidad de caracteres que pueden aparecer entre saltos de línea, como el límite de "1000 caracteres por línea" de algunos programas de Protocolo simple de transferencia de correo , según lo permitido por RFC 2821. Otros agregan encabezados o pies de página al texto. Algunos protocolos mal considerados pero aún en uso utilizan señalización en banda , lo que causa confusión si aparecen patrones específicos en el mensaje. El más conocido es la cadena "From " (incluido el espacio final) al principio de una línea, utilizada para separar mensajes de correo en el formato de archivo mbox .
Al utilizar una codificación binaria a texto en mensajes que ya son texto plano y luego decodificarlos en el otro extremo, se puede lograr que estos sistemas parezcan completamente transparentes . Esto a veces se denomina "blindaje ASCII". Por ejemplo, el componente ViewState de ASP.NET utiliza la codificación base64 para transmitir texto de forma segura mediante HTTP POST, con el fin de evitar colisiones de delimitadores .
Ejemplos
La tabla que aparece a continuación describe codificaciones de binario a texto destacadas. La eficiencia indicada es la relación entre el número de bits de la entrada y el número de bits de la salida codificada. Para cualquier codificación que asigne n posibilidades de entrada a un carácter de 8 bits, la eficiencia es log₂( n )/8.
Algunos formatos más antiguos y poco comunes hoy en día incluyen BOO (un base64), [ 15 ] BTOA (definición vaga de "binario a ascii", históricamente base85, hoy en JavaScript base64) y codificación USR.
Base64 (con muchas variantes, incluyendo uuencoding) asigna secuencias de 6 bits a caracteres imprimibles. Dado que existen más de 2⁶ = 64 caracteres imprimibles, esto es posible. Una secuencia de bytes se traduce tratándola como un flujo de bits, dividiendo este flujo en bloques de 6 bits y generando la secuencia de caracteres correspondiente. Las distintas codificaciones difieren en la asignación entre secuencias de bits y caracteres, así como en el formato del texto resultante.
Algunas codificaciones (la versión original de BinHex y la codificación recomendada para CipherSaber ) utilizan cuatro bits en lugar de seis, asignando todas las secuencias posibles de 4 bits a los 16 dígitos hexadecimales estándar . El uso de 4 bits por carácter codificado produce una salida un 50 % más larga que base64, pero simplifica la codificación y decodificación: expandir cada byte del código fuente de forma independiente a dos bytes codificados es más sencillo que la expansión de 3 bytes del código fuente a 4 bytes codificados que realiza base64.
De los primeros 192 códigos de PETSCII , 164 tienen representaciones visibles cuando se citan: 5 (blanco), 17–20 y 28–31 (colores y controles del cursor), 32–90 (equivalente ASCII), 91–127 (gráficos), 129 (naranja), 133–140 (teclas de función), 144–159 (colores y controles del cursor) y 160–192 (gráficos). [ 16 ] Esto permite teóricamente codificaciones, como base128, entre máquinas que hablan PETSCII.
Véase también
- Shellcode alfanumérico : código diseñado como carga útil para explotar una vulnerabilidad de software. Páginas que muestran breves descripciones de los objetivos de redirección.
- Codificación de caracteres : uso de números para representar caracteres de texto.
- Formato de número de computadora : representación interna de valores numéricos en una computadora digital.
- Geocódigo : Código que representa una entidad geográfica (ubicación u objeto).
- Sistema numérico – Notación para expresar números
- Punycode : codificación para nombres de dominio Unicode
Notas
- ↑ La codificación para la generación de códigos QR selecciona automáticamente la codificación que mejor se adapte al conjunto de caracteres de entrada: codifica 2 caracteres alfanuméricos en 11 bits, y Base45 codifica 16 bits en 3 caracteres de este tipo. Por lo tanto, la eficiencia es de 32 bits de datos binarios codificados en 33 bits: 97 %.
Referencias
- ↑ "Preguntas frecuentes técnicas - InChI Trust" . inchi-trust.org . Consultado el 8 de enero de 2021 .
- ↑ Young, Brian; Faris, Tom; Armogida, Luigi (2019). " Una nomenclatura para el análisis forense de ADN basado en secuencias" . Genetics . 42. Forensic Science International: 14–20 . doi : 10.1016/j.fsigen.2019.06.001 . PMID 31207427.
[...] 2) la salida hexadecimal de la función hash se convierte a hexavigesimal (base 26)
- ↑ Fältström, Patrik; Ljunggren, Freik; Gulik, Dirk-Willem van (2022-08-11). "La codificación de datos Base45" .
Incluso en modo byte, un lector de códigos QR típico intenta interpretar una secuencia de bytes como texto codificado en UTF-8 o ISO/IEC 8859-1. ... Dichos datos deben convertirse en un texto apropiado antes de que ese texto pueda codificarse como un código QR. ... Base45 ... ofrece una codificación de código QR más compacta.
- ↑ Duggan, Ross (18 de agosto de 2009). "Codificación de enteros en base 56 en PHP" .
- ↑ "BaseXML - para XML1.0+" . GitHub . 16 de marzo de 2019.
- ^ Dake él; Yu Sun; Zhen Jia; Xiuying Yu; Wei Guo; Wei él; Chao Qi; Xianhui Lu. "Una propuesta de sustituto de Base85/64 - Base91" (PDF) . Instituto Internacional de Informática y Sistémica .
- ↑ "codificación de texto binario a ASCII" . baseE91 . SourceForge . Consultado el 20 de marzo de 2023 .
- ↑ "Convertir datos binarios a texto con la menor sobrecarga posible" . Notas de Vorakl . 18 de abril de 2020. Archivado del original el 28 de octubre de 2025.
- ↑ Albertson, Kevin (26 de noviembre de 2016). "Codificación Base-122" .
- ↑ «bitcoin/bips» . GitHub . 8 de diciembre de 2021.
- ↑ Rusty Russell ; et al. (15 de octubre de 2020). " Codificación de pagos en el repositorio Lightning RFC" . GitHub .
- ↑ "Formato Bech32m para direcciones de testigo v1+" . GitHub . 5 de diciembre de 2021.
- 1 2 RFC 1760 "El sistema de contraseña de un solo uso S/KEY".
- ↑ RFC 1751 "Una convención para claves de 128 bits legibles por humanos"
- ↑ "Formato de archivo Boo, codificación y decodificación" . Universidad de Columbia .
- ↑ "Códigos PETSCII de Commodore 64" . sta.c64.org .
- Formatos de codificación de binario a texto
- formatos de archivos informáticos
- Codificación de caracteres