¿Qué es Base64? Una explicación clara para desarrolladores
Base64 es una codificación que representa datos binarios arbitrarios usando solo 64 caracteres ASCII imprimibles, de modo que los datos puedan viajar sin problemas por sistemas que esperan texto. No es cifrado ni compresión: es una correspondencia reversible que cualquiera puede decodificar. Su propósito es el transporte: convertir bytes que podrían romper un canal de texto en una cadena de texto plano, a costa de aumentar el tamaño de los datos en un 33 % aproximadamente.
El problema que resuelve Base64
Muchos sistemas antiguos y orientados a texto —correo electrónico, URLs, JSON, XML, cabeceras HTTP— se diseñaron para transportar texto, no binario en bruto. Enviar bytes arbitrarios a través de ellos no es fiable: ciertos valores de byte se interpretan como caracteres de control, saltos de línea o delimitadores, y se eliminan, se corrompen o se truncan. El correo electrónico en particular asumía históricamente ASCII de 7 bits, así que el binario en bruto no sobreviviría al viaje intacto.
Base64 sortea esto reexpresando los datos binarios con un alfabeto pequeño y universalmente seguro que ningún sistema de texto trata de forma especial. El resultado es una cadena que puedes colocar en el cuerpo de un correo, un campo JSON, una URL o un atributo HTML con la confianza de que llegará sin cambios. El compromiso es el tamaño y la legibilidad, no la exactitud: la decodificación siempre reproduce los bytes originales exactos.
Cómo funciona la codificación
Base64 trabaja sobre grupos de bits en lugar de bytes enteros. Toma la entrada de tres bytes (24 bits) a la vez y vuelve a dividir esos 24 bits en cuatro grupos de 6 bits. Cada grupo de 6 bits es un número del 0 al 63, que indexa en el alfabeto Base64: los 64 caracteres A–Z, a–z, 0–9, más «+» y «/». Así, cada 3 bytes de entrada se convierten en 4 caracteres de salida, que es exactamente la razón por la que la salida crece un tercio.
Seis bits por carácter es todo el truco: 2^6 es igual a 64, así que seis bits se corresponden limpiamente con el alfabeto de 64 símbolos sin desperdiciar nada. Para decodificar, un lector invierte el proceso: traduce cada carácter de vuelta a su valor de 6 bits y reempaqueta cuatro de ellos en tres bytes. Como la correspondencia es fija y pública, codificar y decodificar es totalmente determinista y no requiere ninguna clave.
El relleno y el carácter =
La entrada rara vez se divide de forma exacta en grupos de 3 bytes, y el relleno gestiona el resto. Cuando el grupo final tiene solo 1 o 2 bytes en lugar de 3, el codificador aún emite caracteres de 6 bits para los bits que tiene y luego añade caracteres «=» para rellenar la salida hasta un múltiplo de cuatro. Un byte sobrante produce dos caracteres Base64 más «==»; dos bytes sobrantes producen tres caracteres más un solo «=».
El «=» no es dato: no transporta bits y existe solo para señalar cuántos bytes había en el grupo final, de modo que los decodificadores sepan recortar el resultado correctamente. Por eso también la longitud de una cadena Base64 es siempre un múltiplo de cuatro. Una variante común, base64url (usada en JWT y URLs), reemplaza «+» y «/» por «-» y «_» y a menudo omite el relleno por completo, ya que esos caracteres son inseguros o superfluos en las URLs.
Dónde te lo vas a encontrar
Los data URLs son un caso frecuente: una imagen pequeña puede incrustarse directamente en HTML o CSS como data:image/png;base64,iVBORw0KG... , insertando el archivo binario como texto para que se cargue sin una petición separada. Los adjuntos de correo electrónico se codifican en Base64 internamente mediante MIME para que los archivos binarios sobrevivan al transporte de correo basado en texto. También aparece en las cabeceras de autenticación HTTP básica, que codifican en Base64 el nombre de usuario y la contraseña.
Los JSON Web Tokens (JWT) son tres segmentos codificados en base64url unidos por puntos: una cabecera, un payload y una firma. Esto ilustra a la perfección la naturaleza de Base64: como la cabecera y el payload están meramente codificados, no cifrados, cualquiera puede decodificarlos y leerlos, que es exactamente lo que hace un decodificador de JWT. La firma es lo que proporciona integridad; la codificación no proporciona ninguna.
Por qué Base64 no es cifrado
Base64 no proporciona ninguna confidencialidad. No hay clave secreta, no hay algoritmo que romper: la transformación es una búsqueda pública y reversible que cualquier herramienta o persona puede deshacer al instante. Tratar Base64 como una forma de ocultar contraseñas, tokens o datos personales es un error de seguridad grave y frecuente; en el momento en que alguien ve la cadena, puede leer su contenido.
Si necesitas secreto, usa cifrado de verdad (como AES) o, para contraseñas, un hash unidireccional (como bcrypt o Argon2). Base64 se sitúa junto a ellos como un paso separado y complementario: podrías cifrar los datos y luego codificarlos en Base64 para que el texto cifrado se transporte como texto. La codificación hace que los bytes sean seguros de mover; el cifrado los hace ilegibles para los demás. Mantén las dos ideas bien separadas.
La sobrecarga de tamaño
Base64 aumenta el tamaño de los datos en aproximadamente un 33 %, porque 3 bytes se convierten en 4 caracteres (4 ÷ 3 ≈ 1,33). La sobrecarga en el mundo real es algo mayor una vez que tienes en cuenta los saltos de línea opcionales que algunos codificadores insertan cada 76 caracteres, más el uno o dos caracteres de relleno al final. Para un archivo grande, esa expansión es la razón principal para no codificar en Base64 datos que no tengas que codificar.
La orientación práctica: usa Base64 cuando un canal de solo texto lo obligue —insertar un icono diminuto, codificar un adjunto de correo, empaquetar un token— y evítalo para la transferencia masiva de binario cuando haya un canal capaz de manejar binario. Cuando sí necesites codificar o inspeccionar una cadena, nuestro codificador Base64 y nuestro decodificador de JWT se ejecutan enteramente en tu navegador, así que los tokens y el contenido de archivos que pegues se procesan localmente y nunca se envían a un servidor.
Preguntas frecuentes
¿Base64 es cifrado?
No. Base64 es una codificación reversible sin clave: cualquiera puede decodificarla al instante. No proporciona ninguna confidencialidad. Usa cifrado real (como AES) o hashing (como bcrypt) cuando necesites proteger datos.
¿Por qué Base64 hace los archivos más grandes?
Porque convierte cada 3 bytes de entrada en 4 caracteres de salida —un aumento de aproximadamente el 33 %— más un poco por el relleno y cualquier salto de línea insertado. Ese coste de tamaño es la razón para evitarlo en la transferencia masiva de binario.
¿Qué significa el = al final de Base64?
El = es relleno. No transporta datos y solo señala cuántos bytes había en el grupo final para que los decodificadores recorten correctamente. Un = significa dos bytes sobrantes; dos == significan un byte sobrante.
¿Por qué se usa Base64 en los JWT?
La cabecera y el payload de un JWT se codifican en base64url para que se transporten sin problemas como texto en URLs y cabeceras. Solo están codificados, no cifrados, así que cualquiera puede decodificarlos y leerlos; la firma, no la codificación, es la que proporciona confianza.
¿Cuántos caracteres usa Base64?
64: las letras A–Z y a–z, los dígitos 0–9 y los símbolos + y /, con = usado solo para el relleno. La variante segura para URLs cambia + y / por - y _.