Os mesmos bytes, alfabetos diferentes

O Base64 padrão do RFC 4648 usa + e / para os valores 62 e 63; o Base64url usa - e _. O texto ??? resulta em Pz8/ no formato padrão e Pz8_ no formato URL. >>> resulta em Pj4+ e Pj4-. A ferramenta Base64 de texto do Moyoutil recupera as sequências padrão, mas rejeita as que contêm - ou _ com um erro de formato. O código Node.js abaixo reproduz os dois formatos separadamente.

for (const text of ["???", ">>>"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Pz8/ Pz8_
// Pj4+ Pj4-
Caracteres Base64 e Base64url para os valores 62 e 63, com dois exemplos de texto
Diagrama original de comparação de alfabetos. As linhas inferiores mostram codificações reais de entradas fictícias.

RFC 4648 §5: Base64url alphabet

Não determine o formato só pela aparência

foo resulta em Zm9v nos dois formatos. A ausência de +, /, - e _ não comprova que a sequência seja Base64 padrão. Consulte a especificação do sistema que a gerou. O preenchimento é uma regra separada: o RFC 4648 o exige, salvo disposição diferente na especificação que o referencia; o RFC 7515 define Base64url para JWS sem os = finais. Por exemplo, f resulta em Zg== no formato padrão e Zg no formato URL sem preenchimento.

for (const text of ["foo", "f"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Zm9v Zm9v
// Zg== Zg

O Moyoutil não converte Base64url automaticamente nem verifica assinaturas JWS. Este código compara formatos. Obter texto legível não comprova a validade da assinatura. A entrada de assinatura JWS contém o cabeçalho e a carga útil codificados originais; não substitua a entrada de verificação por uma versão recodificada.

RFC 7515 §2–3: Base64url and JWS signing input

Perguntas frequentes

Posso apagar - e _ para decodificar?

Não os apague. São caracteres de dados que representam os valores 62 e 63. Removê-los pode alterar os dados originais. Se precisar do Base64 padrão aceito por esta ferramenta, exporte esse formato no sistema original.