Base32 - Base32

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 usando un conjunto estándar de 32 caracteres, como las veintidós letras mayúsculas A – V y los dígitos 0-9. 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.

Longitud de las notaciones Base64 y Base32 como porcentaje de datos binarios
Base64 Base32
8 bits 133% 160%
7 bits 117% 140%

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 utilizar relleno a menos que la especificación del estándar que hace referencia a la 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.

El alfabeto RFC 4648 Base 32
Valor Símbolo Valor Símbolo Valor Símbolo Valor Símbolo
0 A 8 I dieciséis Q 24 Y
1 B 9 J 17 R 25 Z
2 C 10 K 18 S 26 2
3 D 11 L 19 T 27 3
4 mi 12 METRO 20 U 28 4
5 F 13 norte 21 V 29 5
6 GRAMO 14 O 22 W 30 6
7 H 15 PAG 23 X 31 7
relleno =

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 es una codificación Base32 diseñada por Zooko Wilcox-O'Hearn para que sea 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.

alfabeto z-base-32
Valor Símbolo Valor Símbolo Valor Símbolo Valor Símbolo
0 y 8 mi dieciséis o 24 a
1 B 9 j 17 t 25 3
2 norte 10 k 18 1 26 4
3 D 11 metro 19 tu 27 5
4 r 12 C 20 w 28 h
5 F 13 pag 21 I 29 7
6 gramo 14 q 22 s 30 6
7 8 15 X 23 z 31 9

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. 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.

Alfabeto Base32 de Crockford
Valor Codificar dígito Decodificar dígitos Valor Codificar dígito Decodificar dígitos
0 0 0 o O dieciséis GRAMO g G
1 1 1 yo yo l L 17 H S.S
2 2 2 18 J j J
3 3 3 19 K k K
4 4 4 20 METRO m M
5 5 5 21 norte n N
6 6 6 22 PAG p P
7 7 7 23 Q q Q
8 8 8 24 R r R
9 9 9 25 S s S
10 A un A 26 T t T
11 B b B 27 V v V
12 C c C 28 W w W
13 D d D 29 X x X
14 mi e E 30 Y y Y
15 F f F 31 Z z Z

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 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 como una solución propuesta para resolver el problema. 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 parseInt() y el constructor de Python int() 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.

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.

El alfabeto de base 32 "hexagonal extendido"
Valor Símbolo Valor Símbolo Valor Símbolo Valor Símbolo
0 0 9 9 18 I 27 R
1 1 10 A 19 J 28 S
2 2 11 B 20 K 29 T
3 3 12 C 21 L 30 U
4 4 13 D 22 METRO 31 V
5 5 14 mi 23 norte
6 6 15 F 24 O
7 7 dieciséis GRAMO 25 PAG
8 8 17 H 26 Q almohadilla =

Geohash

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

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Base 32 0 1 2 3 4 5 6 7 8 9 B C D mi F gramo
 
Decimal dieciséis 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Base 32 h j k metro norte pag q r s t tu v w X y z

Juegos de vídeo

Antes de que la NVRAM se volviera universal, varios videojuegos para plataformas Nintendo usaban números base 31 para contraseñas . Estos sistemas omiten las vocales (excepto la Y) 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.

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Base 32 2 3 4 5 6 7 8 9 C F GRAMO H J METRO PAG Q
 
Decimal dieciséis 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Base 32 R V W X C F gramo h j metro pag q r v w X

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 implementaciones Base32 en C / C ++, Perl, Java, JavaScript Python, Go y Ruby.

Ver también

Bases relacionadas con "Potencias de 2":      Otras bases:      Aplicaciones de base32:

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. ^ "CyoEncode" .
  9. ^ "Gnulib - Biblioteca de portabilidad GNU - Proyecto GNU - Free Software Foundation" .
  10. ^ "MIME-Base32 - Codificador y decodificador Base32" . MetaCPAN . Consultado el 29 de julio de 2018 .
  11. ^ "Base32 (Apache Commons Codec 1.15 API)" .
  12. ^ "Base32" .
  13. ^ "Base64 - Base16, Base32, Base64, Codificaciones de datos Base85 - Documentación de Python 3.10.0" .
  14. ^ "Paquete Base32 - codificación / Base32 - PKG.go.dev" .
  15. ^ https://rubygems.org/gems/base32
  16. ^ Convertidor de cadena a hexadecimal