Cómo funciona Base64
Base64 escribe cualquier secuencia de bytes con 64 caracteres seguros, de modo que los datos binarios puedan viajar por sistemas hechos para texto: correo electrónico, JSON, URL, cabeceras HTTP. Cada 3 bytes (24 bits) se convierten en 4 caracteres de 6 bits. Cuando los datos no se dividen en grupos de 3, el último grupo es más corto y los signos = lo completan hasta 4 caracteres.
M a n 01001101 01100001 01101110 010011 010110 000101 101110 T W F u → TWFu
Primero el texto se convierte en bytes, y esta página usa UTF-8 para ello, la codificación que casi todos los sistemas esperan. Por eso «é» se convierte aquí en w6k=; la función btoa() del propio navegador falla con esos caracteres. La variante URL-safe de la RFC 4648 cambia + y / por - y _, que no necesitan escape en direcciones ni en nombres de archivo, y a menudo omite el relleno. Los JSON Web Token la usan.
Al decodificar, la página acepta los dos alfabetos, el relleno ausente, los saltos de línea y el prefijo de una data URL. Si un carácter no es Base64, indica cuál es y dónde está. Si los bytes no son texto UTF-8 válido, se muestran en hexadecimal, con una descarga que deduce el tipo de archivo por sus primeros bytes.
Ejemplo
La palabra «foobar» son 6 bytes, así que se codifica en 8 caracteres sin relleno: Zm9vYmFy. «fooba» son 5 bytes y lleva un «=»: Zm9vYmE=. «f» sola se convierte en Zg==. Son los valores de prueba de la RFC 4648.
Preguntas
¿Base64 es cifrado?
No. Base64 es una codificación: cualquiera puede decodificarla sin clave, igual que hace esta página. No oculta nada. Una contraseña en una cabecera de autenticación básica o en un secreto de Kubernetes está solo codificada en Base64, así que protégela con HTTPS y reglas de acceso, no con la codificación.
¿Por qué Base64 ocupa más que el original?
Cada 3 bytes se convierten en 4 caracteres, así que el resultado es aproximadamente un 33 % mayor, más hasta dos signos =. Los saltos de línea cada 76 caracteres, como en el correo electrónico, añaden algo más. Es el precio de usar solo caracteres de texto seguros.
¿Qué es Base64 URL-safe?
La variante definida en la sección 5 de la RFC 4648. Usa - y _ en lugar de + y /, que tienen significados especiales en las URL y en los nombres de archivo, y a menudo omite el relleno =. Los JSON Web Token y muchas API la usan. Esta página decodifica ambas y codifica con cualquiera de las dos mediante la opción de arriba.
¿Por qué al decodificar salen caracteres extraños?
O los datos no son texto, como una imagen, un archivo comprimido o una clave, o el texto se codificó con un juego de caracteres distinto de UTF-8. Esta página muestra los datos binarios en hexadecimal y te deja descargarlos como archivo. Si ves algunas letras mal en un texto por lo demás legible, probablemente el origen usó Latin-1 o Windows-1252.
¿Cómo decodifico Base64 en la línea de comandos?
En Linux: echo 'Zm9vYmFy' | base64 -d. En macOS: base64 -D, o base64 --decode en versiones recientes. Para codificar un archivo: base64 -w 0 file en Linux para una sola línea larga, base64 -i file en macOS. En PowerShell: [Convert]::FromBase64String('Zm9vYmFy').