Cómo usar el codificador Base16
- Escribe o pega texto en la entrada. El Base16 aparece en la salida mientras escribes.
- El Juego de caracteres bajo la entrada decide cómo se convierten los caracteres en bytes. Por defecto es UTF-8.
- Para decodificar, haz clic en Base16 (RFC 4648) → Texto encima de la herramienta, o en el botón ⇄ Intercambiar, que además pasa la salida actual a la entrada. Se aceptan dígitos en minúsculas, espacios y dos puntos en la entrada.
- Usa Copiar salida o Descargar. Los menús De y A cambian a otros formatos, como Base32 o Base64, para comparar.
Si necesitas hex con separadores, prefijos 0x o salida en minúsculas, Texto a hex tiene esas opciones.
Base16 y RFC 4648
RFC 4648 define Base64, Base32 y Base16 una al lado de otra, y Base16 es la más sencilla de las tres: no tiene relleno, saltos de línea ni reagrupación de bits. Cada byte se divide en dos mitades de 4 bits, y cada mitad corresponde a un carácter. Los vectores de prueba de la propia RFC:
| Entrada | Base16 |
|---|---|
| (vacío) | (vacío) |
f | 66 |
fo | 666F |
foo | 666F6F |
foob | 666F6F62 |
fooba | 666F6F6261 |
foobar | 666F6F626172 |
La longitud de la salida es siempre exactamente el doble del número de bytes, y por eso Base16 no necesita carácter de relleno. Base64 y Base32 agrupan varios bytes por bloque y tienen que completar el último bloque con =. El resumen de las RFC indica dónde se especifica cada una de estas codificaciones.
Base16 frente a Base32 y Base64
Los 12 bytes de Hello, world en cada codificación de RFC 4648:
| Codificación | Salida | Longitud |
|---|---|---|
| Base16 | 48656C6C6F2C20776F726C64 | 24 |
| Base32 | JBSWY3DPFQQHO33SNRSA==== | 24 (20 sin relleno) |
| Base64 | SGVsbG8sIHdvcmxk | 16 |
Base16 sacrifica tamaño a cambio de claridad. Puedes leer los bytes directamente y comparar valores dígito a dígito, y sobrevive a cualquier sistema que maneje letras y dígitos, incluidos los que no distinguen mayúsculas de minúsculas. Base64 es un tercio más corto y es la opción por defecto cuando los bytes tienen que viajar dentro de JSON, correo o URLs. La comparativa de codificaciones va más allá e incluye Base58 y Base85.
Dónde aparece Base16
- Resúmenes hash y sumas de comprobación, que
sha256sumy herramientas similares suelen imprimir en minúsculas. - Huellas de claves OpenPGP, que GnuPG imprime como hex en mayúsculas en grupos de cuatro.
- Vectores de prueba en RFC y otras especificaciones, donde importa más que los valores de byte sean inequívocos que la longitud.
- Protocolos y formatos que necesitan datos que no distingan mayúsculas o que sean puramente alfanuméricos.
Para pasar uno de estos valores a Base64, por ejemplo un hash que una API quiere en Base64, usa Hex a Base64; Base64 a hex hace lo contrario.
Base16 en código
import base64
base64.b16encode(b"Hello").decode() # '48656C6C6F'
base64.b16decode("48656c6c6f", casefold=True) # b'Hello'
printf 'Hello' | basenc --base16 # 48656C6C6F
echo 48656C6C6F | basenc --base16 -d # Hello
basenc forma parte de GNU coreutils 8.31 y posteriores. En Node.js, Buffer.from("Hello").toString("hex").toUpperCase() da el mismo resultado. Las páginas de Python y Bash tratan la parte de Base64 de estos módulos.
Preguntas frecuentes
¿Base16 es lo mismo que hexadecimal?
Sí, para bytes. Base16 es el nombre que da RFC 4648 a la codificación hex: cada byte se convierte en dos caracteres de 0123456789ABCDEF. La RFC especifica mayúsculas; el hex del día a día suele ir en minúsculas.
¿Cuánto más ocupa Base16 que los datos originales?
Exactamente el doble, un 100 % más. Base32 añade un 60 % y Base64 alrededor de un 33 %, así que Base16 es la codificación menos compacta de RFC 4648 y la más fácil de leer.
¿Por qué b16decode de Python rechaza mi cadena?
base64.b16decode solo acepta mayúsculas por defecto. Pasa casefold=True para una entrada en minúsculas, o usa bytes.fromhex(), que acepta ambos casos y espacios.