Base64 existe para transportar bytes atraves de algo que so manipula texto, e por isso aparece em URLs de dados, anexos de email, JSON Web Tokens, e qualquer formato de configuracao que precise conter um documento inteiro dentro de um unico valor de string.
O bug que a maioria das ferramentas Base64 do navegador tem
A funcao integrada btoa do navegador recusa qualquer coisa acima do ponto
de codigo U+00FF. No momento em que seu JSON contem uma letra acentuada,
um simbolo de moeda ou um emoji, btoa lança um erro, e por isso tantas
ferramentas Base64 rapidas quebram no instante em que texto do mundo real
as toca.
Usando o conversor JSON para Base64
Esta ferramenta codifica para bytes UTF-8 primeiro, que e o que todos os outros idiomas e todos os servidores fazem, entao o resultado corresponde ao que um backend produziria para o mesmo documento. Codificar
{"name":"café","price":"₹500","clef":"𝄞"}
produz uma string Base64 que decodifica, atraves do proprio atob padrao
do navegador e TextDecoder, de volta ao documento original exato: café,
₹500 e o simbolo musical 𝄞 todos sobrevivem, incluindo esse ultimo
caractere, que precisa de um par substituto em JavaScript e quatro bytes
em UTF-8.
Tres falhas, distinguidas
A decodificacao pode falhar de tres maneiras genuinamente diferentes, e juntar tudo como “entrada invalida” esconde qual voce esta vendo:
- Nao e Base64 de jeito nenhum. Um caractere fora do alfabeto Base64
e nomeado diretamente:
This is not Base64: "!" is not a Base64 character, com a posicao. - Base64 valido, mas os bytes nao sao texto. A string decodifica bem como bytes, mas esses bytes nao sao UTF-8 valido, o que geralmente significa que voce tem Base64 de um arquivo binario ao inves de um documento.
- Texto valido, mas nao e JSON. O Base64 decodificou perfeitamente em uma string, e essa string nao e um documento JSON, reportado com o mesmo tipo de mensagem que o formatador e o validador dao para JSON quebrado.
Quais formatos ele aceita
A decodificacao tolera um prefixo de URL data:, quebras de linha dentro
do texto Base64, e o alfabeto seguro para URLs que substitui - e _ por
+ e /. Cole diretamente uma URL de dados copiada da aba de rede de um
navegador; o prefixo e removido automaticamente.
Isso e criptografia
Nao. Base64 e uma codificacao, nao uma cifra. Qualquer pessoa pode decodifica-lo com uma unica linha de codigo em qualquer idioma, incluindo colando nesta mesma ferramenta na outra direcao. Serve para tornar bytes seguros para transportar atraves de um canal de somente texto, nao para mante-los secretos.