stringtranslate.com

Codificación de binario a texto

Una codificación de binario a texto es la codificación de datos en texto sin formato . Más precisamente, es una codificación de datos binarios en una secuencia de caracteres imprimibles . Estas codificaciones son necesarias para la transmisión de datos cuando el canal de comunicación no permite datos binarios (como el correo electrónico o NNTP ) o no es limpio en 8 bits . La documentación de PGP ( RFC  4880) utiliza el término " armadura ASCII " para la codificación de binario a texto cuando se refiere a Base64 .

Descripción general

La necesidad básica de una codificación de binario a texto proviene de la necesidad de comunicar datos binarios arbitrarios a través de protocolos de comunicación preexistentes que fueron diseñados para transportar únicamente texto en inglés legible por humanos . Esos protocolos de comunicación solo pueden ser seguros de 7 bits (y dentro de ellos evitar ciertos códigos de control ASCII), pueden requerir saltos de línea en ciertos intervalos máximos y pueden no mantener espacios en blanco . Por lo tanto, sólo los 94 caracteres ASCII imprimibles son "seguros" para transmitir datos.

Descripción

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 que no representan caracteres imprimibles. Por ejemplo, la letra mayúscula A se representa en 7 bits como 100 0001 2 , 0x41 (101 8 ), el número 2 es 011 0010 2 0x32 (62 8 ), el carácter } es 111 1101 2 0x7D (175 8 ), y el carácter de control RETORNO es 000 1101 2 0x0D (15 8 ).

En cambio, la mayoría de las computadoras almacenan datos en la memoria organizados en bytes de ocho bits . Los archivos que contienen código ejecutable por máquina y datos no textuales normalmente contienen 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 incluyeran sólo 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 que le indica que realice alguna función.

Sin embargo, a menudo es deseable poder enviar datos no textuales a través de sistemas basados ​​en texto, como cuando se puede adjuntar un archivo de imagen a un mensaje de correo electrónico. Para lograr esto, los datos se codifican de alguna manera, de modo que los datos de ocho bits se codifiquen en caracteres ASCII de siete bits (generalmente usando solo caracteres alfanuméricos y de puntuación: los caracteres imprimibles ASCII). Una vez que llega sano y salvo a su destino, se decodifica nuevamente a su forma de ocho bits. Este proceso se conoce como codificación binaria a texto. Muchos programas realizan esta conversión para permitir el transporte 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 sin formato . Por ejemplo:

Al utilizar una codificación de binario a texto en mensajes que ya son texto sin formato y luego decodificarlos en el otro extremo, se puede hacer que dichos sistemas parezcan completamente transparentes . Esto a veces se denomina "blindaje ASCII". Por ejemplo, el componente ViewState de ASP.NET utiliza codificación base64 para transmitir texto de forma segura a través de HTTP POST, a fin de evitar la colisión de delimitadores .

Estándares de codificación

La siguiente tabla compara las formas más utilizadas de codificaciones de binario a texto. La eficiencia enumerada es la relación entre la cantidad de bits en la entrada y la cantidad de bits en la salida codificada.

Los 95 códigos de impresión 32 a 126 se conocen como caracteres imprimibles ASCII .

Algunos formatos antiguos y poco comunes en la actualidad incluyen la codificación BOO, BTOA y USR.

La mayoría de estas codificaciones generan texto que contiene solo un subconjunto de todos los caracteres imprimibles ASCII : por ejemplo, la codificación base64 genera texto que solo contiene letras mayúsculas y minúsculas (A–Z, a–z), números (0–9). y los símbolos "+", "/" y "=".

Algunas de estas codificaciones (codificación entre comillas imprimible y porcentual) se basan en un conjunto de caracteres permitidos y un único carácter de escape . Los caracteres permitidos no se modifican, mientras que todos los demás caracteres se convierten en una cadena que comienza con el carácter de escape. Este tipo de conversión permite que el texto resultante sea casi legible, ya que las letras y los dígitos forman parte de los caracteres permitidos y, por lo tanto, se dejan como están en el texto codificado. Estas codificaciones producen la salida ASCII simple más corta para entradas que en su mayoría son ASCII imprimibles.

Algunas otras codificaciones ( base64 , uuencoding ) se basan en mapear todas las secuencias posibles de seis bits en diferentes caracteres imprimibles. Dado que hay más de 2 6  = 64 caracteres imprimibles, esto es posible. Una secuencia determinada de bytes se traduce viéndola como un flujo de bits, dividiendo este flujo en trozos de seis bits y generando la secuencia de caracteres correspondientes. Las diferentes codificaciones difieren en el mapeo entre secuencias de bits y caracteres y en cómo se formatea el 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 genera una salida un 50% más larga que base64, pero simplifica la codificación y decodificación: expandir cada byte en la fuente de forma independiente a dos bytes codificados es más simple que la expansión de base64 de 3 bytes de fuente a 4 bytes codificados.

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 de cursor), 32–90 (equivalente a ascii), 91–127 (gráficos), 129 (naranja), 133–140 (teclas de función), 144–159 (colores y controles de cursor) y 160–192 (gráficos). [13] En teoría, esto permite codificaciones, como base128, entre máquinas que hablan PETSCII.

Ver también

Notas

  1. ^ La codificación para la generación de códigos QR selecciona automáticamente la codificación para que coincida con el conjunto de caracteres de entrada, codifica 2 caracteres alfanuméricos en 11 bits y Base45 codifica 16 bits en 3 de esos caracteres. La eficiencia es, por tanto, de 32 bits de datos binarios codificados en 33 bits: 97%.
  2. ^ Para datos arbitrarios; codifica los 189 caracteres no reservados con tres bytes y los 66 caracteres restantes con uno.
  3. ^ Para texto; codificando únicamente cada uno de los 18 caracteres reservados.
  4. ^ Un byte almacenado como =XX. Codificando todos menos los 94 caracteres que no lo necesitan (incluidos espacios y tabulaciones).

Referencias

  1. ^ Fältström, Patrik; Ljunggren, Freik; Gulik, Dirk-Willem van (11 de agosto de 2022). "La codificación de datos Base45". Incluso en el 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ódigos QR más compacta.
  2. ^ Duggan, Ross (18 de agosto de 2009). "Codificación de enteros Base-56 en PHP".
  3. ^ 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 .
  4. ^ "codificación de texto binario a ASCII". baseE91 . FuenteForge . Consultado el 20 de marzo de 2023 .
  5. ^ "Convierta datos binarios en texto con la menor sobrecarga". Las notas de Vorakl . 18 de abril de 2020.
  6. ^ Albertson, Kevin (26 de noviembre de 2016). "Codificación Base-122".
  7. ^ "BaseXML - para XML1.0+". GitHub . 16 de marzo de 2019.
  8. ^ "bitcoin/bips". GitHub . 8 de diciembre de 2021.
  9. ^ Russell oxidado ; et al. (2020-10-15). "Codificación de pagos en el repositorio Lightning RFC". GitHub .
  10. ^ "Formato Bech32m para direcciones de testigos v1+". GitHub . 5 de diciembre de 2021.
  11. ^ ab RFC  1760 "El sistema de contraseña de un solo uso S/KEY".
  12. ^ RFC  1751 "Una convención para claves de 128 bits legibles por humanos"
  13. ^ "Códigos Commodore 64 PETSCII". sta.c64.org .