Codificacao Base64 explicada: quando e por que usar

O Base64 aparece em todo o lado no desenvolvimento web, desde anexos de email ate JWTs. Aprenda o que faz, quando usar e quando nao usar.

O que e Base64?

Base64 e um esquema de codificacao que converte dados binarios numa string de 64 caracteres ASCII imprimiveis. Os 64 caracteres sao: A-Z, a-z, 0-9, + e /, mais = como caracter de preenchimento.

Foi concebido para resolver um problema especifico: muitos protocolos de transporte e sistemas de armazenamento foram construidos para tratar texto, nao dados binarios arbitrarios. Quando precisa de mover conteudo binario (imagens, ficheiros, chaves) atraves de um canal so de texto, o Base64 e a solucao padrao.

Como funciona (de forma simples)

O Base64 toma cada 3 bytes (24 bits) de entrada e codifica-os como 4 caracteres. Isto significa:

  • 3 bytes de entrada -> 4 caracteres de saida
  • Cada string codificada em Base64 e aproximadamente 33% maior que o binario original

O processo e determinista e reversivel, e uma codificacao, nao encriptacao. Qualquer pessoa pode descodificar uma string Base64 de volta aos bytes originais.

Casos de uso comuns

1. Incorporar imagens em HTML ou CSS

Em vez de criar uma ligacao para um ficheiro de imagem externo, pode incorpora-la diretamente:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUh..." />

Isto elimina um pedido HTTP, o que pode acelerar pequenos icones ou imagens em linha. A contrapartida: o ficheiro HTML fica maior e a imagem nao pode ser armazenada em cache de forma independente.

2. JSON Web Tokens (JWTs)

Os JWTs usam Base64URL (uma variante que substitui + por - e / por _) para codificar o cabecalho e o payload. Isto torna o token seguro para usar em URLs e cabecalhos HTTP sem problemas de codificacao de URL.

3. Anexos de email (MIME)

Os protocolos de email eram originalmente so de texto. O MIME (Multipurpose Internet Mail Extensions) usa Base64 para codificar anexos binarios, PDFs, imagens, documentos Word, para que possam viajar com seguranca atraves da infraestrutura de email.

4. Autenticacao de API

A autenticacao HTTP basica codifica as credenciais como utilizador:palavra-passe em Base64:

Authorization: Basic dXNlcjpwYXNzd29yZA==
Nota: isto nao e encriptacao. As credenciais sao facilmente descodificadas. O HTTPS e o que proporciona seguranca aqui, nao o Base64.

5. Armazenar dados binarios em JSON ou bases de dados

O JSON nao tem tipo binario nativo. O Base64 e a forma padrao de incluir blobs binarios (icones, chaves criptograficas, conteudo de ficheiros) dentro de um payload JSON ou de uma coluna de texto numa base de dados.

O que o Base64 NAO e

O Base64 nao e encriptacao. Nao proporciona qualquer seguranca. Nunca o use para ocultar dados sensiveis. O Base64 nao e compressao. Torna os dados maiores. O Base64 nao e hash. E totalmente reversivel.

Estes sao equivocos comuns. A unica funcao do Base64 e a conversao de binario para texto.

Base64 seguro para URL vs Base64 padrao

O Base64 padrao usa + e /, que tem significados especiais nos URLs. O Base64URL substitui-os por - e _, tornando a saida segura para usar em strings de consulta e segmentos de caminho de URL sem codificacao percentual. Se esta a trabalhar com JWTs ou tokens de URL, use sempre Base64URL.

Codificar e descodificar no browser

Pode codificar e descodificar strings Base64 sem ferramentas nem bibliotecas usando o Codificador/Descodificador Base64 deste site, cole o seu texto ou conteudo binario, converta instantaneamente, sem enviar dados para servidores.

Em JavaScript: btoa(str) codifica, atob(str) descodifica. Em Python: base64.b64encode(bytes) e base64.b64decode(str).

Resumo

O Base64 e uma codificacao binario-para-texto que torna os dados binarios seguros para transmissao atraves de sistemas baseados em texto. Aparece em JWTs, anexos de email, imagens incorporadas e cabecalhos de autenticacao de API. Acrescenta cerca de 33% de sobrecarga de tamanho e nao proporciona qualquer seguranca por si so. Use-o quando um protocolo ou sistema exige representacao binaria segura para texto.