stringtranslate.com

Codificación de binario a texto

Una codificación de binario a texto es una codificación de datos en texto simple . 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 de 8 bits limpio . La documentación de PGP ( RFC  4880) utiliza el término " armadura ASCII " para la codificación de binario a texto cuando se hace referencia a Base64 .

Descripción general

La necesidad básica de una codificación de binario a texto surge de la necesidad de comunicar datos binarios arbitrarios a través de protocolos de comunicación preexistentes que fueron diseñados para transmitir únicamente texto legible por humanos en idioma inglés . Esos protocolos de comunicación pueden ser seguros sólo en 7 bits (y, dentro de ese límite, evitar ciertos códigos de control ASCII), y 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 utilizarlos 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 , más 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 numeral 2 es 011 0010 2 0x32 (62 8 ), el carácter } es 111 1101 2 0x7D (175 8 ), y el carácter de control RETURN es 000 1101 2 0x0D (15 8 ).

En cambio, la mayoría de los ordenadores almacenan los datos en la memoria organizados en bytes de ocho bits . Los archivos que contienen código ejecutable por máquina y datos no textuales suelen contener los 256 valores posibles de bytes de ocho bits. Muchos programas informáticos empezaron a depender de esta distinción entre texto de siete bits y datos binarios de ocho bits , y no funcionaban correctamente si aparecían caracteres no ASCII en datos que se esperaba que incluyeran 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 que le indica que debe realizar 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 adjunta 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 codifican en caracteres ASCII de siete bits (generalmente utilizando solo caracteres alfanuméricos y de puntuación, los caracteres imprimibles ASCII). Una vez que llegan sanos y salvos a su destino, se decodifican nuevamente a su formato de ocho bits. Este proceso se conoce como codificación de binario a texto. Muchos programas realizan esta conversión para permitir el transporte de datos, como PGP y GNU Privacy Guard .

Codificación de texto sin formato

Los métodos de codificación de binario a texto también se utilizan como mecanismo para codificar texto simple . Por ejemplo:

Al utilizar una codificación de binario a texto en mensajes que ya son texto simple y luego decodificarlos en el otro extremo, se puede lograr que dichos sistemas parezcan completamente transparentes . A esto a veces se lo 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, con el fin de evitar colisiones de delimitadores .

Estándares de codificación

La siguiente tabla compara las formas más utilizadas de codificación de binario a texto. La eficiencia que se indica 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 isprint del 32 al 126 se conocen como caracteres imprimibles ASCII .

Algunos formatos más antiguos y hoy en día poco comunes 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 ASCII imprimibles: 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 imprimible entre comillas y codificación 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 son 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 la entrada que es principalmente ASCII imprimible.

Algunas otras codificaciones ( base64 , uuencoding ) se basan en la asignación de todas las secuencias posibles de seis bits a diferentes caracteres imprimibles. Dado que hay más de 2 6  = 64 caracteres imprimibles, esto es posible. Una secuencia dada de bytes se traduce viéndola como un flujo de bits, dividiendo este flujo en fragmentos de seis bits y generando la secuencia de caracteres correspondiente. Las diferentes codificaciones difieren en la asignación 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, lo que hace que todas las secuencias posibles de 4 bits se asignen 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 la de base64, pero simplifica la codificación y la decodificación: expandir cada byte de la fuente de forma independiente a dos bytes codificados es más simple que expandir 3 bytes de la fuente a 4 bytes codificados en 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). [13] Esto teóricamente permite codificaciones, como base128, entre máquinas que hablan PETSCII.

Véase también

Notas

  1. ^ La codificación para la generación de códigos QR selecciona automáticamente la codificación que coincide con el conjunto de caracteres de entrada, codificando 2 caracteres alfanuméricos en 11 bits, y Base45 codifica 16 bits en 3 de esos caracteres. La eficiencia es, por lo tanto, 32 bits de datos binarios codificados en 33 bits: 97%.
  2. ^ Para datos arbitrarios; codificar 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. Codifica todos los caracteres excepto los 94 que no lo necesitan (incluidos el espacio y la tabulación).

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 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.
  2. ^ Duggan, Ross (18 de agosto de 2009). "Codificación de enteros en 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". basE91 . SourceForge . Consultado el 20 de marzo de 2023 .
  5. ^ "Convertir datos binarios a texto con el menor consumo de recursos". 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. ^ Rusty Russell ; et al. (15 de octubre de 2020). "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 PETSCII de Commodore 64". sta.c64.org .