Cómo codificar texto a Base32
- Escribe o pega texto en Entrada · Texto. Con En vivo marcado, la salida se actualiza con cada pulsación.
- Lee el resultado en Salida · Base32 (RFC 4648). Desmarca Relleno (=) bajo la salida para quitar los signos
=del final. - Para otra variante, abre A y elige Base32hex, Crockford Base32 o z-base-32.
- Para decodificar, haz clic en Base32 (RFC 4648) → Texto en el selector de dirección. El decodificador Base32 dedicado empieza en esa dirección.
- Usa Copiar salida o Descargar para llevarte el resultado.
Por defecto, el texto se convierte en bytes como UTF-8. Si necesitas el Base32 del mismo texto en otra codificación, por ejemplo Windows-1252 o UTF-16LE, cambia el Juego de caracteres bajo la entrada.
Cómo funciona Base32
Base32 lee la entrada de 5 en 5 bits y escribe un carácter por cada 5 bits. Cinco bytes (40 bits) se convierten exactamente en ocho caracteres, así que la salida es un 60 % mayor que la entrada. Una cadena Base64 de los mismos datos sería un 33 % mayor; ese es el precio que paga Base32 por usar solo letras mayúsculas y seis dígitos.
Cuando la longitud de la entrada no es múltiplo de 5 bytes, el último grupo se rellena con = hasta 8 caracteres. Estos son los vectores de prueba de RFC 4648, generados con esta herramienta:
| Entrada | Base32 | Sin relleno |
|---|---|---|
f | MY====== | MY |
fo | MZXQ==== | MZXQ |
foo | MZXW6=== | MZXW6 |
foob | MZXW6YQ= | MZXW6YQ |
fooba | MZXW6YTB | MZXW6YTB |
foobar | MZXW6YTBOI====== | MZXW6YTBOI |
El relleno no lleva datos. Un decodificador puede deducir el número de bytes a partir de la cantidad de caracteres reales, por eso muchos formatos lo omiten.
Variantes de Base32: RFC 4648, base32hex, Crockford, z-base-32
«Base32» es el nombre de una familia. Los cuatro miembros empaquetan 5 bits por carácter; se diferencian en el alfabeto y en si usan relleno. Los mismos cinco bytes, Hello, en cada una:
| Variante | Alfabeto | Hello | Relleno | Dónde la encontrarás |
|---|---|---|---|---|
| Base32 RFC 4648 | A–Z, 2–7 | JBSWY3DP | = | Secretos TOTP/2FA, direcciones onion v3 de Tor, CIDv1 de IPFS (b…, en minúsculas) |
| Base32hex | 0–9, A–V | 91IMOR3F | = | Registros NSEC3 de DNSSEC; las cadenas codificadas se ordenan igual que los bytes |
| Crockford Base32 | 0–9, A–Z sin I L O U | 91JPRV3F | ninguno | Identificadores que la gente lee en voz alta y teclea |
| z-base-32 | ybndrfg8ejkmcpqxot1uwisza345h769 | jb1sa5dx | ninguno | Claves e identificadores pensados para personas |
Base32hex y Crockford se parecen, pero son alfabetos distintos: a partir de la H se separan, así que 91IMOR3F y 91JPRV3F son los mismos bytes. Elegir el equivocado decodifica sin error y te da otros bytes sin avisar.
El decodificador Crockford de aquí es tolerante, tal como pretendía Crockford: lee I y L como 1, O como 0 e ignora los guiones, así que 91JP-RV3F sigue dando Hello. No añade ni comprueba el símbolo de control opcional de Crockford.
Base32 para secretos TOTP y 2FA
Las apps de autenticación obtienen su secreto de un enlace otpauth://, que normalmente se muestra como código QR:
otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example
El parámetro secret es Base32 RFC 4648 sin relleno. JBSWY3DPEHPK3PXP tiene 16 caracteres, así que contiene 10 bytes. RFC 4226 recomienda un secreto de 160 bits (20 bytes), que ocupa 32 caracteres Base32. Si tu secreto está guardado en Base64 o hex, conviértelo con Base64 a Base32. Si escribes el texto Base64 en esta página, se codifican sus caracteres, lo que da Base32 válido pero de otros bytes, y todos los códigos generados con él serán rechazados.
Un secreto TOTP es una clave: quien lo tenga puede generar tus códigos. Esta página trabaja con el secreto dentro de la pestaña de tu navegador, y su Content Security Policy impide que la página haga peticiones de red, salvo las del contador de visitas de Cloudflare.
Base32 en la línea de comandos y en Python
GNU coreutils incluye un comando base32 que funciona como base64:
printf 'Hello' | base32
printf 'JBSWY3DP' | base32 -d
La primera línea imprime JBSWY3DP y la segunda Hello. La biblioteca estándar de Python tiene las tres formas de RFC 4648:
import base64
base64.b32encode(b"Hello") # b'JBSWY3DP'
base64.b32hexencode(b"Hello") # b'91IMOR3F'
base64.b32encode(b"Hi").decode().rstrip("=") # 'JBUQ'
Hay más recetas de codificación en la página de Python. Para decodificar, incluidos los errores de relleno y de minúsculas que lanza Python, consulta el decodificador Base32.
Preguntas frecuentes
¿Por qué la salida Base32 termina en ======?
Base32 trabaja con bloques de 5 bytes que se convierten en 8 caracteres. Cuando el último bloque es más corto, RFC 4648 completa los 8 caracteres con =, así que Hi se convierte en JBUQ====. Desmarca Relleno (=) si el receptor quiere solo JBUQ.
¿Base32 distingue mayúsculas de minúsculas?
El alfabeto de RFC 4648 está en mayúsculas, pero la mayoría de los decodificadores también aceptan minúsculas, y este también. Python es una excepción: base64.b32decode rechaza las minúsculas salvo que pases casefold=True.
¿Uso Base32 o Base64?
Usa Base64 cuando solo lean los datos programas: es más corto (un 33 % más de tamaño frente a un 60 %). Usa Base32 cuando las personas lean, tecleen o dicten el valor, o cuando tenga que sobrevivir a sistemas que no distinguen mayúsculas, como los nombres DNS o algunos sistemas de archivos.
¿Qué caracteres usa Base32?
Base32 RFC 4648 usa A–Z y 2–7, más = como relleno. Los dígitos 0, 1, 8 y 9 quedan fuera, así que una cadena que los contenga es base32hex, Crockford o directamente no es Base32.