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
Base32 tiene una serie de ventajas sobre Base64 :
Base32 también tiene ventajas sobre hexadecimal / Base16 :
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.
Base64 | Base32 | |
---|---|---|
8 bits | 133% | 160% |
7 bits | 117% | 140% |
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.
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 | = |
Al cambiar el alfabeto Base32, todos los estándares alternativos tienen combinaciones similares de símbolos alfanuméricos.
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.
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 |
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.
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 |
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).
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.
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 | = |
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:
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 |
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) .
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 |
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]
Bases relacionadas con "Potencias de 2":
| Otras bases:
| Aplicaciones de base32:
|