Base62 vs Base64: identificadores não são fluxos de bytes arbitrários

Saiba por que a ordem alfabética Base62 e as regras de zero à esquerda são importantes e quando Base64URL é um formato de intercâmbio melhor.

Base62 normalmente usa dígitos e letras maiúsculas e minúsculas. Isso o torna atraente para identificadores compactos sem pontuação. Base64 usa 64 símbolos e empacota grupos de bits diretamente. Embora os nomes sejam semelhantes, as implementações Base62 geralmente modelam a entrada como um número, o que cria diferentes questões de interoperabilidade.

A ordem alfabética faz parte do formato

Duas bibliotecas Base62 podem escolher ordens diferentes para dígitos, letras maiúsculas e letras minúsculas. A mesma string visível representa números diferentes. Um sistema usando 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz não concorda com aquele que coloca letras minúsculas primeiro. Registre o alfabeto e os vetores de teste no protocolo; “Base62” por si só não é suficiente.

A distinção entre maiúsculas e minúsculas também é importante. Um proxy em letras minúsculas, um agrupamento de banco de dados que não diferencia maiúsculas de minúsculas ou um identificador normalizado manualmente podem alterar seu valor. Se sua camada de armazenamento ignorar maiúsculas e minúsculas, nem Base62 comum nem Base64 serão uma representação segura sem uma decisão de design adicional.

Preservar o comprimento ao codificar bytes

Considere dois arquivos contendo hexadecimal 01 e 0001. Interpretados como inteiros sem sinal, ambos têm valor um. Uma conversão simples de número inteiro para Base62 perde a distinção. Um formato Base62 orientado a bytes precisa de manipulação explícita de zero à esquerda ou de um campo de comprimento. Isto é especialmente relevante para tokens aleatórios e valores criptográficos de comprimento fixo.

const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true: numeric equality loses byte length

Escolha com base no significado do valor

Se você estiver encurtando um inteiro de banco de dados sob o controle de um aplicativo, um alfabeto Base62 documentado pode ser conveniente. Se você estiver transportando bytes arbitrários entre sistemas independentes, Base64URL geralmente fornece um contrato padronizado mais claro. Ele substitui traço e sublinhado pela pontuação padrão Base64, mantendo o mesmo agrupamento de seis bits.

Codificação não é randomização. Os números inteiros sequenciais permanecem previsíveis após a conversão em Base62. Se os identificadores precisarem resistir à adivinhação, gere entropia imprevisível suficiente usando uma fonte criptográfica aleatória e codifique os bytes resultantes sem perder comprimento. Não trate um token de aparência compacta como prova de que sua geração é segura.

Ao comparar tamanhos de saída, inclua prefixos, regras de preenchimento e quaisquer metadados de comprimento. Roundtrip pelo menos uma entrada vazia, um byte zero, vários zeros à esquerda e um byte de alto valor. O alfabeto Base64URL é padronizado em RFC 4648; um aplicativo Base62 deve especificar os detalhes adicionais.