Base64URL vs padrão Base64: alfabeto, preenchimento e análise URL

Reconheça o traço e o sublinhado, entenda o preenchimento opcional e evite a corrupção do sinal de adição ao espaço nos parâmetros de consulta URL.

Base64URL altera dois caracteres do alfabeto: o sinal de mais do Base64 padrão se torna um travessão e a barra se torna um sublinhado. A informação codificada permanece inalterada. A variante ajuda quando o protocolo circundante dá um significado especial ao sinal de mais ou barra, mas não isenta o valor de cada URL ou regra de aplicativo.

Use um vetor que exponha a diferença

Os bytes FB FF codificam como +/8= na norma Base64 e -_8= em Base64URL. Um teste como Hello produz apenas caracteres alfabéticos compartilhados, portanto, não pode revelar se a conversão segura URL está funcionando.

const standard = btoa(String.fromCharCode(251, 255));
const urlSafe = standard.replace(/\+/g, '-').replace(/\//g, '_');
console.log(standard); // +/8=
console.log(urlSafe); // -_8=

O preenchimento é um acordo separado

Muitos formatos de tokens omitem os sinais de igual finais, enquanto outros sistemas os mantêm. Alterar o alfabeto e remover o preenchimento são escolhas independentes. Se o comprimento de uma entrada sem preenchimento deixar resto 2 na divisão por 4, são necessários dois sinais de igual; se o resto for 3, é necessário um. Um resto de 1 não pode ser corrigido apenas com preenchimento, pois um caractere de seis bits não é suficiente para representar um byte completo.

Ao validar, verifique também os bits não utilizados no último caractere. Um decodificador que os ignora pode aceitar várias strings para a mesma sequência de bytes. Essa ambigüidade pode ser importante quando um aplicativo compara strings codificadas em vez de bytes decodificados. Um produtor canônico deve emitir uma representação acordada.

Não confunda análise de consulta com decodificação Base64

A análise de consulta no estilo de formulário interpreta um sinal de adição literal como um espaço. Um valor Base64 padrão colado sem escape em uma consulta pode, portanto, ser corrompido antes que o decodificador o veja. Construa a consulta com URLSearchParamsou use a variante Base64URL se o protocolo de recebimento a especificar.

const query = new URLSearchParams({ payload: '+/8=' });
console.log(query.toString()); // payload=%2B%2F8%3D
console.log(query.get('payload')); // +/8=

Não substitua automaticamente todos os espaços por mais: um espaço pode ser uma formatação genuína ou evidência de outro erro. Preserve a origem, identifique a camada de transporte que a alterou e aplique uma correção deliberada. Para segmentos JWT, use as regras Base64URL do formato de token em vez de inventar uma política geral de reparo.

Os alfabetos padrão e seguros para URL são descritos em RFC 4648. Sua integração ainda precisa de escolhas explícitas para preenchimento, aceitação de espaços em branco e comprimento máximo.