Base32


De Wikipedia, la enciclopedia libre
  (Redirigido desde Base 32 )
Saltar a navegación Saltar a búsqueda

Base32 es el sistema numérico base -32 . Utiliza un conjunto de 32 dígitos , cada uno de los cuales se puede representar con 5 bits (2 5 ). Una forma de representar números Base32 de una manera legible por humanos es mediante el uso de un conjunto estándar de 32 caracteres, como las veintiséis letras mayúsculas de la A a la Z y los dígitos del 2 al 7. Sin embargo, se utilizan muchas otras variaciones en diferentes contextos.

Este es un ejemplo de un número Base32 representado usando el conjunto de 32 caracteres descrito anteriormente ( IPFS CIDv1 en codificación en mayúsculas Base32):BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354

Ventajas

Base32 tiene una serie de ventajas sobre Base64 :

  1. El conjunto de caracteres resultante es todo un caso, lo que a menudo puede ser beneficioso cuando se utiliza un sistema de archivos que no distingue entre mayúsculas y minúsculas , nombres DNS , lenguaje hablado o memoria humana.
  2. El resultado se puede usar como un nombre de archivo porque no puede contener el símbolo '/', que es el separador de ruta de Unix .
  3. El alfabeto se puede seleccionar para evitar pares de símbolos diferentes de apariencia similar, por lo que las cadenas se pueden transcribir con precisión a mano. (Por ejemplo, el conjunto de símbolos RFC  4648 omite los dígitos para uno, ocho y cero, ya que podrían confundirse con las letras 'I', 'B' y 'O').
  4. Un resultado que excluya el relleno se puede incluir en una URL sin codificar ningún carácter.

Base32 también tiene ventajas sobre hexadecimal / Base16 :

  1. La representación de Base32 ocupa aproximadamente un 20% menos de espacio. (1000 bits toman 200 caracteres, en comparación con 250 para Base16).

Desventajas

La representación de Base32 ocupa aproximadamente un 20% más de espacio que Base64 . Además, debido a que codifica de 5 bytes a 8 caracteres (en lugar de 3 bytes a 4 caracteres), el relleno hasta un límite de 8 caracteres es una carga mayor para los mensajes cortos.

RFC 4648 Alfabeto Base32

El alfabeto Base32 más utilizado se define en RFC 4648 . Se utiliza un alfabeto de A - Z , seguido de 2 - 7 . Se omiten 0 y 1 debido a su similitud con las letras O e I (por lo tanto, "2" en realidad tiene un valor decimal de 26 ). 

En algunas circunstancias, el relleno no es necesario ni se utiliza (el relleno se puede inferir de la longitud de la cadena módulo 8). RFC 4648 establece que se debe usar relleno a menos que la especificación del estándar que hace referencia a RFC indique explícitamente lo contrario. La exclusión de relleno es útil cuando se utilizan datos codificados en base32 en tokens de URL o nombres de archivo donde el carácter de relleno podría plantear un problema.

Versiones alternativas

Al cambiar el alfabeto Base32, todos los estándares alternativos tienen combinaciones similares de símbolos alfanuméricos.

z-base-32

z-base-32 [1] es una codificación Base32 diseñada por Zooko Wilcox-O'Hearn para ser más fácil para el uso humano y más compacta. Incluye 1 , 8 y 9 pero excluye l , v y 2 . También permuta el alfabeto para que los caracteres más fáciles sean los que ocurran con más frecuencia. Codifica de forma compacta cadenas de bits cuya longitud en bits no es un múltiplo de 8 y omite los caracteres de relleno finales. se utilizó z-base-32 en el Mnet proyecto de código abierto, y se utiliza actualmente en Phil Zimmermann 's ZRTP protocolo, y en el Tahoe-LAFS proyecto de código abierto.

Base de Crockford32

Otro diseño alternativo para Base32 es creado por Douglas Crockford , quien propone usar caracteres adicionales para una suma de comprobación mod-37. [2] Excluye las letras I, L y O para evitar confusiones con los dígitos. También excluye la letra U para reducir la probabilidad de obscenidad accidental.

Las bibliotecas para codificar datos binarios en Crockford's Base32 están disponibles en una variedad de idiomas.

Electrologica

Los programadores que trabajaban en Electrologica X1 usaban una forma anterior de notación en base 32 para representar direcciones de máquina. Los "dígitos" se representaron como números decimales del 0 al 31. Por ejemplo, 12-16 representaría la dirección de la máquina 400 (= 12 * 32 + 16).

base32hex

Triacontakaidecimal [ cita requerida ] es otro diseño alternativo para Base 32, que se extiende hexadecimal de una manera más natural y fue propuesto por primera vez por Christian Lanctot, un programador que trabaja en el software Sage , en una carta a la revista del Dr. Dobb en marzo de 1999 [3] como una solución propuesta para resolver el error Y2K y se conoce como "Double Hex". Esta versión se describió en RFC 2938 con el nombre "Base-32". RFC 4648, aunque reconoce el uso existente de esta versión en NSEC3 , se refiere a ella como base32hex y desaconseja etiquetarla como "base32". 

De manera similar al hexadecimal, los dígitos utilizados son 0-9 seguidos de letras consecutivas del alfabeto. Esto coincide con los dígitos utilizados por la función de JavaScript [4] y el constructor de Python [5] cuando se especifica una base mayor que 10 (como 16 o 32). También conserva la propiedad hexadecimal de preservar el orden de clasificación bit a bit de los datos representados, a diferencia de la base-32 o base-64 de RFC 4648. [6]parseInt() int()

A diferencia de muchos otros sistemas de notación de base 32, triacontakaidecimal es contiguo e incluye caracteres que pueden entrar en conflicto visualmente. Con la fuente correcta es posible distinguir visualmente entre 0, O y 1, I. Otras fuentes no son adecuadas porque el contexto que generalmente proporciona el inglés no lo proporciona un sistema de notación que expresa números. Sin embargo, la elección de la fuente no está controlada por la notación o la codificación, por lo que es arriesgado asumir que se utilizará una fuente distinguible.

Geohash

Consulte el algoritmo Geohash , que se utiliza para representar valores de latitud y longitud en un entero positivo (entrelazado de bits). [7] La representación en base32 de Geohash usa todos los dígitos decimales (0-9) y el alfabeto casi en minúsculas, excepto las letras "a", "i", "l", "o", como se muestra en el siguiente mapa de caracteres:

Juegos de vídeo

Antes de que la NVRAM se volviera universal, varios videojuegos para plataformas Nintendo usaban números base 32 para contraseñas . Estos sistemas omiten las vocales para evitar que el juego dé accidentalmente una contraseña profana . Por lo tanto, los caracteres son generalmente una variación menor del siguiente conjunto: 0–9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z y algunos signos de puntuación. Los juegos que se sabe que utilizan este sistema incluyen Mario Is Missing! , La máquina del tiempo de Mario , Tetris Blast y El señor de los anillos (Super NES) .

Alfabeto seguro para palabras

El alfabeto Base32 seguro para palabras es una extensión del alfabeto Base20 de código de ubicación abierto . Ese alfabeto usa 8 dígitos numéricos y 12 dígitos de letras que no distinguen entre mayúsculas y minúsculas, elegidos para evitar formar palabras accidentalmente. Tratar el alfabeto como sensible a mayúsculas y minúsculas produce un conjunto de 32 (8 + 12 + 12) dígitos.

Software

Base32 es una notación para codificar datos de bytes arbitrarios utilizando un conjunto restringido de símbolos que pueden ser utilizados convenientemente por humanos y procesados ​​por computadoras.

Base32 consta de un conjunto de símbolos compuesto por 32 caracteres diferentes, así como un algoritmo para codificar secuencias arbitrarias de bytes de 8 bits en el alfabeto Base32. Debido a que se necesita más de un símbolo Base32 de 5 bits para representar cada byte de entrada de 8 bits, también especifica los requisitos sobre las longitudes permitidas de las cadenas Base32 (que deben ser múltiplos de 40 bits). Por el contrario, el sistema Base64 estrechamente relacionado utiliza un conjunto de 64 símbolos.

Están disponibles las implementaciones de Base32 en C / C ++, [8] [9] Perl, [10] Java, [11] JavaScript [12] Python, [13] Go [14] y Ruby [15] .[dieciséis]

Ver también

Referencias

  1. O'Whielacronx, Zooko (2009). "Codificación en base 32 orientada a humanos" .
  2. ^ Douglas Crockford. "Base 32" . Archivado desde el original el 23 de diciembre de 2002.
  3. Lanctot, Christian ( 1 de marzo de 1999). "¿Una cita mejor? (Segunda letra debajo de ese título) - Cartas" . Dr. Dobb's .
  4. ^ "parseInt () - JavaScript" . Documentos web de MDN . Mozilla.
  5. ^ "Funciones integradas" . Documentación de Python . Fundación de software Python. Archivado desde el original el 26 de octubre de 2018 . Consultado el 9 de agosto de 2017 .
  6. ^ Josefsson, Simon (2006). "7. Codificación Base 32 con Alfabeto Hexagonal Extendido" . RFC 4648: Codificaciones de datos Base16, Base32 y Base64 . IETF.
  7. ^ "Consejos y trucos - geohash.org" . geohash.org . Consultado el 3 de abril de 2020 .
  8. ^ http://sourceforge.net/projects/cyoencode/
  9. ^ https://www.gnu.org/software/gnulib/
  10. ^ "MIME-Base32 - Codificador y decodificador Base32" . MetaCPAN . Consultado el 29 de julio de 2018 .
  11. ^ https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base32.html
  12. ^ https://www.npmjs.com/package/base32
  13. ^ https://docs.python.org/3/library/base64.html
  14. ^ https://golang.org/pkg/encoding/base32
  15. ^ https://rubygems.org/gems/base32
  16. ^ Convertidor de cadena a hexadecimal
  • RFC  4648
Obtenido de " https://en.wikipedia.org/w/index.php?title=Base32&oldid=1033968578 "