Como usar o codificador Base16
- Digite ou cole o texto na entrada. O Base16 aparece na saída enquanto você digita.
- O Charset abaixo da entrada define como os caracteres viram bytes. UTF-8 é o padrão.
- Para decodificar, clique em Base16 (RFC 4648) → Texto acima da ferramenta, ou no botão ⇄ Inverter, que também move a saída atual para a entrada. Dígitos em minúsculas, espaços e dois-pontos na entrada são aceitos.
- Use Copiar saída ou Baixar para o resultado. Os menus De e Para mudam para outros formatos, como Base32 ou Base64, para comparar.
Para hex com separadores, prefixos 0x ou saída em minúsculas, o Texto para hex tem essas opções.
Base16 e a RFC 4648
A RFC 4648 define Base64, Base32 e Base16 lado a lado, e o Base16 é o mais simples dos três: não tem preenchimento, quebras de linha nem reagrupamento de bits. Cada byte é dividido em duas metades de 4 bits, e cada metade corresponde a um caractere. Os vetores de teste da própria RFC:
| Entrada | Base16 |
|---|---|
| (vazio) | (vazio) |
f | 66 |
fo | 666F |
foo | 666F6F |
foob | 666F6F62 |
fooba | 666F6F6261 |
foobar | 666F6F626172 |
O comprimento da saída é sempre exatamente o dobro do número de bytes, e é por isso que o Base16 não precisa de caractere de preenchimento. O Base64 e o Base32 agrupam vários bytes por bloco e precisam completar o último bloco com =. A visão geral das RFCs mostra onde cada uma dessas codificações é especificada.
Base16 vs Base32 vs Base64
Os 12 bytes de Hello, world em cada codificação da RFC 4648:
| Codificação | Saída | Comprimento |
|---|---|---|
| Base16 | 48656C6C6F2C20776F726C64 | 24 |
| Base32 | JBSWY3DPFQQHO33SNRSA==== | 24 (20 sem preenchimento) |
| Base64 | SGVsbG8sIHdvcmxk | 16 |
O Base16 troca tamanho por clareza. Dá para ler os bytes direto nele e comparar valores dígito a dígito, e ele sobrevive a qualquer sistema que lide com letras e dígitos, inclusive os que não diferenciam maiúsculas. O Base64 é um terço mais curto e é o padrão quando os bytes precisam viajar dentro de JSON, e-mail ou URLs. A comparação de codificações vai além, incluindo Base58 e Base85.
Onde você encontra Base16
- Digests de hash e checksums, geralmente impressos em minúsculas pelo
sha256sume ferramentas parecidas. - Fingerprints de chaves OpenPGP, que o GnuPG imprime em hex maiúsculo em grupos de quatro.
- Vetores de teste em RFCs e outras especificações, onde valores de byte sem ambiguidade importam mais que o comprimento.
- Protocolos e formatos que precisam de dados sem diferenciação de maiúsculas ou puramente alfanuméricos.
Para levar um valor desses para Base64, por exemplo um digest que uma API quer em Base64, use o Hex para Base64; o Base64 para hex faz o caminho inverso.
Base16 no 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
O basenc faz parte do GNU coreutils 8.31 e posteriores. No Node.js, Buffer.from("Hello").toString("hex").toUpperCase() dá o mesmo resultado. As páginas de Python e Bash tratam o lado do Base64 desses módulos.
Perguntas frequentes
Base16 é o mesmo que hexadecimal?
Sim, para bytes. Base16 é o nome que a RFC 4648 dá à codificação hex: cada byte vira dois caracteres de 0123456789ABCDEF. A RFC especifica maiúsculas; o hex do dia a dia costuma ser em minúsculas.
Quanto o Base16 é maior que os dados originais?
Exatamente o dobro, um acréscimo de 100%. O Base32 acrescenta 60% e o Base64 cerca de 33%, então o Base16 é a menos compacta das codificações da RFC 4648 e a mais fácil de ler.
Por que o b16decode do Python rejeita minha string?
O base64.b16decode só aceita maiúsculas por padrão. Passe casefold=True para entrada em minúsculas, ou use bytes.fromhex(), que aceita as duas caixas e espaços.