Base64 en un minuto
Los ordenadores guardan todo como bytes, y un byte puede tener 256 valores distintos. Muchos protocolos y formatos antiguos, como el correo electrónico, las URL, las cadenas JSON o las cabeceras HTTP, se diseñaron para texto legible y pueden estropear o rechazar bytes fuera de un pequeño conjunto seguro. Base64 lo resuelve escribiendo esos bytes con caracteres que sobreviven en cualquier parte.
La herramienta de abajo convierte el texto a Base64 mientras escribes y lo devuelve a su forma original con un clic en Decodificar. El texto se pasa antes a UTF-8, así que las tildes, la ñ, otros alfabetos y los emoji vuelven exactamente igual. La línea de estado indica cuántos bytes de texto se convirtieron en cuántos bytes de Base64.
Pruébalo aquí: Codificar Base64
Abrir la herramienta completaCómo funciona la codificación, paso a paso
Base64 toma la entrada de 3 en 3 bytes (24 bits) y divide esos 24 bits en cuatro grupos de 6 bits. Con 6 bits se representa un número del 0 al 63, y cada número se busca en un alfabeto fijo: del 0 al 25 son A-Z, del 26 al 51 son a-z, del 52 al 61 son 0-9, el 62 es + y el 63 es /.
Toma la palabra Man. Sus bytes son 77, 97 y 110, o 01001101 01100001 01101110 en binario. Reagrupados en bloques de 6 bits quedan 010011 010110 000101 101110, es decir 19, 22, 5 y 46, que corresponden a T, W, F y u. Así, Man se convierte en TWFu.
Cuando la longitud de la entrada no es múltiplo de 3, el último grupo se rellena (padding). Un byte sobrante produce dos caracteres más ==, y dos bytes sobrantes producen tres caracteres más =. Por eso Ma se codifica como TWE=, M como TQ== y Hello (5 bytes) como SGVsbG8=. Un ejemplo en español: Niño ocupa 5 bytes en UTF-8 (la ñ usa dos) y queda como TmnDsW8=.
Por qué Base64 ocupa un 33 por ciento más
Cuatro caracteres de salida llevan la información de tres bytes de entrada, así que el tamaño se multiplica por 4/3, más hasta dos caracteres de relleno. Algunos sistemas además insertan un salto de línea cada 76 caracteres (correo MIME) o cada 64 (certificados PEM), lo que suma unos pocos puntos más.
| Tamaño original | Tamaño en Base64 | Con líneas de 76 caracteres |
|---|---|---|
| 3 bytes | 4 bytes | 4 bytes |
| 1 KB (1024 bytes) | 1368 bytes | unos 1,4 KB |
| 100 KB | unos 133 KB | unos 137 KB |
| 1 MB | unos 1,33 MB | unos 1,37 MB |
| Adjunto de correo de 10 MB | unos 13,3 MB | unos 13,7 MB |
Dónde te encuentras Base64
- Adjuntos de correo: MIME codifica los archivos en Base64 con líneas de 76 caracteres. Por eso un archivo de 20 MB puede ser rechazado por un servicio con un límite de 25 MB por mensaje: codificado supera los 27 MB.
- Data URI: imágenes, fuentes e iconos incrustados en HTML o CSS con el prefijo data:image/png;base64, seguido del archivo codificado.
- Autenticación HTTP Basic: la cabecera Authorization: Basic seguida de usuario:contraseña en Base64. Cualquiera que vea la cabecera puede leerla, así que solo es segura sobre HTTPS.
- JSON Web Tokens: el header y el payload son JSON codificado en Base64url, y por eso todo JWT empieza por eyJ (la codificación de los caracteres {").
- Certificados y claves: los archivos PEM son Base64 entre las líneas BEGIN y END.
- API y configuración: datos binarios en campos JSON, secrets de Kubernetes, variables de entorno y exportaciones de bases de datos. Las facturas electrónicas en PDF o XML también suelen viajar como un campo Base64 en las API.
Variantes: estándar, segura para URL y MIME
El Base64 estándar (RFC 4648) usa + y / y rellena con =. Esos tres caracteres tienen un significado especial en las direcciones web, así que existe una variante segura para URL, a menudo llamada Base64url, que usa guion y guion bajo en su lugar y normalmente elimina el relleno. La usan los JWT y muchas API web. En la herramienta, activa Seguro para URL para obtener esta forma; el decodificador acepta las dos y también el relleno ausente.
El Base64 MIME, usado en el correo, es Base64 estándar dividido en líneas de 76 caracteres como máximo. Activa Líneas de 76 caracteres cuando necesites una salida para el cuerpo de un correo o un archivo de estilo PEM.
Base64 no es cifrado
No hay clave ni secreto. Cualquiera que vea cGFzc3dvcmQxMjM= puede convertirlo en password123 en un segundo. Trata las credenciales, tokens y configuraciones en Base64 igual que texto plano: no las subas a repositorios públicos, no las pegues en sitios web de los que no te fías y no uses Base64 para esconder nada. Los secrets de Kubernetes, por ejemplo, por defecto solo están codificados en Base64, no cifrados.
Si necesitas confidencialidad, usa cifrado de verdad (como AES con una biblioteca adecuada) y, si el resultado cifrado tiene que viajar como texto, codifícalo después en Base64.
Problemas comunes al decodificar
- Tildes y eñes rotas (ñ en lugar de ñ): el texto se codificó o decodificó con otro juego de caracteres. En JavaScript, btoa solo acepta caracteres hasta el código 255 y los codifica como Latin 1, así que la ü queda como /A== en lugar de la forma UTF-8 w7w=, y caracteres como el símbolo del euro dan error. Usa un codificador que entienda UTF-8, como la herramienta de esta página.
- Errores de carácter no válido: la cadena tiene espacios, saltos de línea o caracteres de la variante para URL que un decodificador estricto rechaza. Esta herramienta ignora los saltos de línea y acepta los dos alfabetos.
- La longitud no es múltiplo de 4: se quitó el relleno. Añade = hasta que la longitud sea divisible entre 4, o usa un decodificador que lo haga por ti.
- El resultado parece una serie de símbolos sin sentido: los datos son binarios, por ejemplo una imagen, un PDF o un ZIP. La herramienta avisa de que son datos binarios, identifica el tipo de archivo cuando puede y te deja guardarlo con Descargar.
Codificar desde la línea de comandos
En Linux, base64 archivo.txt codifica y base64 -d archivo.b64 decodifica. En macOS existe el mismo comando base64; las versiones antiguas usan -D para decodificar. En Windows PowerShell, [Convert]::ToBase64String([IO.File]::ReadAllBytes("archivo.bin")) codifica un archivo, y en el Símbolo del sistema funciona certutil -encode entrada salida, aunque añade líneas de cabecera BEGIN y END. Para comprobaciones rápidas con texto, la herramienta del navegador es más ágil y no deja los datos en el historial de la terminal.