Qué es Base64
Base64 es una forma de representar datos binarios usando solo caracteres de texto seguros: letras, dígitos y dos símbolos. Existe porque muchos canales fueron diseñados para transportar texto y no bytes arbitrarios: el correo electrónico, las cabeceras HTTP, los documentos JSON y XML, las URL. Un archivo de imagen, una clave criptográfica o cualquier secuencia de bytes que contenga valores no imprimibles se rompería al pasar por esos canales; codificado en Base64, viaja como texto común y del otro lado se recupera exactamente igual.
Es importante tener claro lo que no es: Base64 no es cifrado ni compresión. Cualquiera puede decodificarlo sin ninguna clave, y el resultado siempre ocupa más espacio que el original. Su único objetivo es que los datos sobrevivan al transporte.
Cómo funciona en una línea
El alfabeto tiene 64 símbolos, y 64 = 2⁶, así que cada carácter Base64 representa exactamente 6 bits. El codificador toma los bytes de entrada de a tres (24 bits), los parte en cuatro bloques de 6 bits y reemplaza cada bloque por su símbolo. Tres bytes de entrada siempre producen cuatro caracteres de salida. El paso a paso a nivel de bits, con ejemplos resueltos, está en la guía Base64 explicado: cómo funciona, el relleno y sus variantes.
| Valores | Símbolos | Notas |
|---|---|---|
| 0 – 25 | A – Z | |
| 26 – 51 | a – z | |
| 52 – 61 | 0 – 9 | |
| 62 | + | - en base64url |
| 63 | / | _ en base64url |
| relleno | = | completa el último bloque de 4 caracteres |
Cómo usar la herramienta
- Codificar: el texto se convierte primero a bytes con UTF-8 y después a Base64. Así,
ñproducew7E=y un emoji se codifica con sus cuatro bytes, igual que lo haría cualquier lenguaje de programación moderno. - Decodificar: acepta indistintamente el alfabeto estándar y el de base64url, con o sin
=al final, e ignora espacios y saltos de línea (los correos y los archivos PEM cortan el Base64 en líneas de 64 o 76 caracteres). Si algún carácter no pertenece al alfabeto, la herramienta indica cuál es y en qué posición está. - Contenido binario: si lo decodificado no es texto UTF-8 válido (por ejemplo, el Base64 de una imagen o de una clave), el resultado se muestra como bytes en hexadecimal en lugar de caracteres ilegibles.
- Usar el resultado como entrada invierte la operación con un clic, útil para comprobar que el viaje de ida y vuelta devuelve lo mismo.
Cuánto crece el tamaño
Como 3 bytes se convierten en 4 caracteres, Base64 agrega aproximadamente un 33 % al tamaño original, más el relleno del último bloque. La fórmula exacta para la salida con padding es 4 × ⌈n / 3⌉:
| Bytes de entrada | Caracteres Base64 |
|---|---|
| 1 | 4 |
| 2 | 4 |
| 3 | 4 |
| 10 | 16 |
| 100 | 136 |
| 1024 (1 KiB) | 1368 |
| 1.048.576 (1 MiB) | 1.398.104 |
Ese 33 % importa cuando se incrustan imágenes en CSS o HTML como data URI: una imagen de 300 KB pasa a ocupar unos 400 KB de texto dentro del documento, y además deja de poder cachearse por separado. Para íconos pequeños compensa ahorrar una petición HTTP; para imágenes grandes, casi nunca.
Base64 estándar y base64url
El RFC 4648 define dos alfabetos que solo difieren en dos símbolos. El estándar usa + y /, que tienen significado especial en las URL (+ puede interpretarse como espacio en una query string y / separa segmentos de ruta) y en los nombres de archivo. La variante base64url los reemplaza por - y _, y en la práctica suele omitir el = final, porque también es un carácter reservado en las URL. Es la variante que usan los JSON Web Tokens (JWT), muchos identificadores en enlaces y las claves en formato JWK.
Usos habituales
- Adjuntos de correo (MIME): el formato original para el que se popularizó Base64, con líneas cortadas cada 76 caracteres.
- Data URIs:
data:image/png;base64,...permite incrustar archivos pequeños directamente en HTML o CSS. - Autenticación HTTP Basic: la cabecera
Authorization: Basic dXN1YXJpbzpjbGF2ZQ==es simplementeusuario:claveen Base64. Sin HTTPS, cualquiera que vea la petición puede leer la contraseña. - JWT: la cabecera y el contenido del token son JSON codificado en base64url, legibles por cualquiera. Lo que protege al token es la firma, no la codificación.
- Claves y certificados PEM: el bloque entre
-----BEGIN CERTIFICATE-----y-----END CERTIFICATE-----es la estructura binaria del certificado codificada en Base64. - Campos binarios en JSON: JSON no tiene un tipo para bytes, así que las APIs suelen enviar archivos o firmas como cadenas Base64.
Desde la terminal y el código
En Linux y macOS, base64 codifica y base64 -d decodifica (en macOS antiguos, -D). Un error muy común es usar echo sin -n: echo 'Hola' | base64 produce SG9sYQo= porque codifica también el salto de línea final, mientras que printf 'Hola' | base64 produce el esperado SG9sYQ==. En JavaScript del navegador, btoa() solo acepta caracteres de hasta un byte: btoa("€") lanza un error y btoa("ñ") devuelve 8Q== (Latin-1) en lugar del w7E= de UTF-8. Por eso hay que convertir primero el texto con TextEncoder, que es lo que hace esta herramienta.
Privacidad
La codificación y la decodificación ocurren por completo en el navegador. El texto ingresado no se envía a ningún servidor ni se guarda en la URL, así que la herramienta puede usarse con tokens o credenciales de prueba sin que salgan del equipo.