Base64 existe para transportar bytes a traves de algo que solo maneja texto, por eso aparece en URLs de datos, adjuntos de correo, JSON Web Tokens, y cualquier formato de configuracion que deba contener un documento completo dentro de un solo valor de cadena.
El bug que tienen la mayoria de las herramientas Base64 del navegador
La funcion integrada btoa del navegador rechaza cualquier cosa por encima
del punto de codigo U+00FF. En el momento en que tu JSON contiene una letra
con tilde, un simbolo de moneda o un emoji, btoa lanza un error, por eso
tantas herramientas rapidas de Base64 se rompen al instante cuando el texto
del mundo real las toca.
Usando el convertidor JSON a Base64
Esta herramienta codifica a bytes UTF-8 primero, que es lo que hace todos los demas lenguajes y todos los servidores, por lo que el resultado coincide con lo que produciria un backend para el mismo documento. Codificar
{"name":"café","price":"₹500","clef":"𝄞"}
produce una cadena Base64 que se decodifica, a traves del propio atob
estandar del navegador y TextDecoder, de vuelta al documento original
exacto: café, ₹500 y el simbolo musical 𝄞 todos sobreviven, incluido
ese ultimo caracter, que necesita un par sustituto en JavaScript y cuatro
bytes en UTF-8.
Tres fallos, distinguidos
La decodificacion puede fallar de tres maneras genuinamente diferentes, y agruparlas todas como “entrada invalida” oculta cual estas viendo:
- No es Base64 en absoluto. Un caracter fuera del alfabeto Base64 se
nombra directamente:
This is not Base64: "!" is not a Base64 character, con la posicion. - Base64 valido, pero los bytes no son texto. La cadena se decodifica bien como bytes, pero esos bytes no son UTF-8 valido, lo que generalmente significa que tienes Base64 de un archivo binario en vez de un documento.
- Texto valido, pero no es JSON. El Base64 se decodifico perfectamente en una cadena, y esa cadena no es un documento JSON, reportado con el mismo tipo de mensaje que el formateador y validador dan por JSON roto.
Que formatos acepta
La decodificacion tolera un prefijo de URL data:, saltos de linea dentro
del texto Base64, y el alfabeto seguro para URL que sustituye - y _ por
+ y /. Pega directamente una URL de datos que copiaste de la pestana
de red de un navegador; el prefijo se elimina automaticamente.
Esto es encriptacion
No. Base64 es una codificacion, no un cifrado. Cualquiera puede decodificarlo con una sola linea de codigo en cualquier lenguaje, incluyendo pegandolo en esta misma herramienta en la otra direccion. Sirve para hacer que los bytes sean seguros para transportar a traves de un canal de solo texto, no para mantenerlos en secreto.