Bloco exato de 5 bytes
- Entrada
- "Hello" (5 bytes) em Base32 §6
- Saída esperada
- JBSWY3DP
8 caracteres, zero "=": 5 bytes é o tamanho que fecha um bloco Base32 sem sobra nenhuma.
base32 rfc 4648 alfabeto e padding
RFC 4648 fecha a conta do Base32 em uma frase: cada 5 bytes de entrada (40 bits) viram exatamente 8 caracteres de saída (8 × 5 bits), sem sobra e sem perda. É esse encaixe exato, não o alfabeto, que dita quando um bloco final precisa de padding e quanto.
8 caracteres, zero "=": 5 bytes é o tamanho que fecha um bloco Base32 sem sobra nenhuma.
2 caracteres de dado mais 6 "=", uma das 5 combinações de padding que a especificação permite, nunca outra contagem.
Os 7 primeiros caracteres são o dado; o "V" final é o resto de (valor dos bytes) mod 37, vindo do conjunto extra fora do alfabeto de 32 símbolos.
Se a outra ponta fala em RFC 4648 sem qualificar, é o alfabeto A-Z2-7 com padding. Use base32hex quando a ordem alfabética do texto codificado precisar acompanhar a ordem numérica dos dados, que é o caso do NSEC3 em DNSSEC. Use Crockford quando o código vai ser lido e digitado por pessoas e você quer detectar erro na hora, com o dígito de verificação. Use z-base-32 quando o valor vai ser ditado em voz alta. Escolher errado não corrompe nada, mas a outra ponta não vai conseguir decodificar.
Exatamente 6, para completar os 8 caracteres do bloco: 1 byte gera só 2 caracteres de dado (menos de 5 bits sobrando), então a RFC 4648 fecha o restante com "=". As únicas quantidades válidas de padding em Base32 §6 são 0, 1, 3, 4 ou 6; qualquer outro número indica uma string malformada.
É o resto da divisão por 37 do valor numérico dos bytes originais, lidos como um único inteiro grande. Como 37 é maior que os 32 símbolos do alfabeto de dados, o dígito de verificação usa 5 símbolos extras (*, ~, $, =, U) reservados só para essa posição, nunca aparecendo nos dados codificados em si.
Porque o alfabeto de Base32hex (0-9 depois A-V) segue a mesma ordem crescente dos valores numéricos que representa, então comparar duas strings codificadas como texto dá o mesmo resultado que comparar os bytes originais. O alfabeto A-Z então 2-7 do Base32 padrão não tem essa propriedade, porque letras vêm antes de dígitos na tabela ASCII usada para comparar texto.
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567Tudo é calculado no seu navegador, inclusive o arquivo carregado e qualquer segredo colado. Nada é enviado para servidor.