Los mismos bytes, alfabetos distintos
Base64 estándar en RFC 4648 usa + y / para los valores 62 y 63; Base64url usa - y _. El texto ??? produce Pz8/ en el formato estándar y Pz8_ en el formato URL. >>> produce Pj4+ y Pj4-. La herramienta de texto Base64 de Moyoutil recupera las cadenas estándar, pero rechaza las que contienen - o _ con un error de formato. El código Node.js siguiente reproduce ambos formatos por separado.
for (const text of ["???", ">>>"]) {
const bytes = Buffer.from(text, "utf8");
console.log(bytes.toString("base64"),
bytes.toString("base64url"));
}
// Pz8/ Pz8_
// Pj4+ Pj4-No deduzcas el formato solo por su aspecto
foo produce Zm9v en ambos formatos. La ausencia de +, /, - y _ no demuestra que una cadena sea Base64 estándar. Consulta la especificación del sistema que la generó. El relleno es una regla aparte: RFC 4648 lo exige salvo que la especificación que lo referencia indique otra cosa; RFC 7515 define Base64url para JWS omitiendo los = finales. Por ejemplo, f produce Zg== en el formato estándar y Zg en el formato URL sin relleno.
for (const text of ["foo", "f"]) {
const bytes = Buffer.from(text, "utf8");
console.log(bytes.toString("base64"),
bytes.toString("base64url"));
}
// Zm9v Zm9v
// Zg== ZgMoyoutil no convierte automáticamente Base64url ni verifica firmas JWS. Este código compara formatos. Obtener texto legible no demuestra que una firma sea válida. La entrada de firma JWS contiene el encabezado y la carga útil codificados originales; no sustituyas la entrada de verificación por una versión recodificada.
Preguntas frecuentes
¿Puedo borrar - y _ para decodificar?
No los borres. Son caracteres de datos que representan los valores 62 y 63. Quitarlos puede alterar los datos originales. Si necesitas el Base64 estándar que acepta esta herramienta, expórtalo desde el sistema original.