Base64 es una codificación binaria a texto ASCII que convierte cualquier cadena de bytes en 64 caracteres seguros (A-Z, a-z, 0-9, + y /). Se usa cuando necesitas transportar datos binarios por canales que sólo aceptan texto: correos electrónicos, URLs, cabeceras HTTP, JSON, tokens JWT o data URLs en HTML/CSS. Este codificador y decodificador Base64 procesa UTF-8 correctamente y funciona 100 % en tu navegador.
Cómo funciona Base64
Base64 toma la entrada en grupos de 3 bytes (24 bits) y los reagrupa en 4 caracteres de 6 bits, mapeando cada bloque de 6 bits a uno de los 64 símbolos del alfabeto. Al final añade `=` como padding cuando la longitud no es múltiplo de 3. El resultado es ~33 % más largo que el original: no es compresión, sino cambio de codificación.
Base64 estándar vs Base64URL
El Base64 estándar usa `+` y `/`, que no son seguros en URLs porque tienen significado especial. Base64URL (RFC 4648) los sustituye por `-` y `_` y elimina el padding. Es el que usan JWT, JWE y muchas APIs modernas. Convierte entre ambos con simples reemplazos.
UTF-8 y el problema con caracteres no-ASCII
btoa() en JavaScript sólo acepta ASCII; con acentos o emojis explota. La solución es codificar primero a UTF-8 con TextEncoder y luego a Base64, que es lo que hace esta herramienta. Al decodificar hacemos el proceso inverso con TextDecoder para no perder caracteres.
No confundas codificación con cifrado
Base64 NO es cifrado: cualquiera puede decodificarlo. Nunca uses Base64 para 'ocultar' contraseñas o tokens sensibles: es equivalente a texto plano. Su propósito es exclusivamente de transporte.
Casos de uso comunes
- Embeber imágenes pequeñas como data URLs en CSS.
- Enviar binarios (adjuntos) por email con MIME.
- Codificar credenciales HTTP Basic Auth en la cabecera Authorization.
- Leer o construir los tres bloques de un JWT.
Buenas prácticas
- Usa Base64URL en URLs y JWTs.
- No embebas binarios grandes en JSON o HTML: cuesta un 33 % en tamaño.
- Nunca uses Base64 como mecanismo de seguridad.
- Verifica que emisor y receptor usen el mismo alfabeto (estándar vs URL).