Zashify

Flujos de trabajo

Codificación y decodificación en Base64: qué es y qué no es

Base64 es una codificación, no un candado. Quien lo ve puede leerlo. Aquí está para qué sirve y para qué no.

Zahid SheerazLectura de 5 min

Base64 está en todas partes de la informática - en los adjuntos de correo, en las cabeceras de autenticación, en las cargas JSON, en los URI de datos de CSS - y se entiende mal casi en todas partes donde aparece. El malentendido es concreto: la gente cree que es cifrado. No lo es. Es una forma de escribir datos binarios como texto, y quien la ve puede leerla.

Qué hace realmente Base64

Base64 toma bytes y los reescribe usando 64 caracteres imprimibles: las letras mayúsculas y minúsculas, los dígitos, + y /, con = para el relleno. Ese es todo el truco.

¿Por qué 64? Porque 64 es la mayor potencia de dos que cabe dentro del rango ASCII imprimible, y porque los sistemas que transportan texto - correo, cabeceras HTTP, JSON, XML - se diseñaron para texto, no para bytes arbitrarios. Un JPEG en un adjunto de correo, una contraseña en una cabecera Basic Auth, una imagen incrustada en un archivo CSS: todo eso es Base64, y todo está ahí porque la capa de transporte solo habla texto.

La codificación es sin pérdidas: codifica y luego decodifica, y recuperas exactamente los bytes con los que empezaste, hasta el último. Una cadena Base64 no es más pequeña que los datos que representa: es aproximadamente un tercio mayor, porque 6 bits de datos se extienden sobre 8 bits de carácter.

Por qué no es cifrado

Esta es la parte importante, y aquí es donde la gente se lastima.

Base64 es reversible por cualquiera. No hay clave, no hay contraseña, no hay secreto. El algoritmo es público, el alfabeto es público, y una cadena Base64 se decodifica en cualquier herramienta y en cualquier lenguaje en una fracción de segundo. Es el mismo nivel de seguridad que escribir una palabra al revés.

Si codificas una contraseña en Base64, no la has protegido. Solo la has hecho más difícil de leer de un vistazo. Quien la intercepte, la tiene.

La confusión existe porque Base64 parece un secreto: es una cadena larga de galimatías que la aplicación no muestra. Pero el galimatías es un formato, no un cifrado, y la aplicación lo esconde porque es feo, no porque sea privado.

El error de seguridad real suele ser uno de estos:

  • Guardar una contraseña de base de datos en Base64 en un archivo de configuración, y pensar que está "codificada" en lugar de "en texto plano con un alfabeto distinto".
  • Poner un token en una URL y suponer que la codificación lo esconde. Un token en una URL está en el historial del navegador, en los registros del servidor y en la cabecera Referer: Base64 no cambia nada de eso.
  • Usar Base64 para "esconder" una clave de API en JavaScript del lado del cliente. La clave está en el código fuente; la codificación es cosmética.

Nada de eso es culpa de Base64. Es una codificación y hace su trabajo. El trabajo no es el secreto.

El detalle de codificación que rompe los scripts

Lo que falla en la práctica es el conjunto de caracteres.

Base64 opera sobre bytes. Si tu texto tiene un acento, un emoji o un carácter no latino, tienes que decidir qué bytes codificar, y eso significa decidir una codificación. UTF-8 es la única opción sensata hoy, pero muchos scripts y bibliotecas antiguas codifican los caracteres como Latin-1, o como la codificación por defecto de la plataforma, y el resultado se decodifica como basura en el otro extremo.

La herramienta de Base64 codifica como UTF-8 antes de Base64, así que el viaje de ida y vuelta es exacto. Si estás escribiendo el tuyo propio, la regla es:

  1. Texto a bytes UTF-8.
  2. Bytes a Base64.
  3. Base64 a bytes.
  4. Bytes a texto UTF-8.

Salta el paso 1 y tendrás un script que funciona en inglés y se rompe en todo lo demás.

La trampa del salto de línea

Muchas herramientas envuelven la salida Base64 a 76 caracteres, el límite antiguo de correo. Así que la cadena que copias de una herramienta se parece a esto:

SGVsbG8sIFdvcmxkIQ==

...pero en un correo llega como varias líneas, y un decodificador estricto la rechaza porque los saltos de línea no forman parte del alfabeto.

La solución es recortar los espacios en blanco antes de validar. La herramienta de Base64 lo hace, así que una cadena envuelta se decodifica bien. Si estás escribiendo tu propio decodificador, recorta primero y valida después, en ese orden.

La trampa del relleno

Una cadena Base64 termina en caracteres =, y su número no es arbitrario. El relleno es lo que hace que la longitud sea múltiplo de 4, porque el algoritmo procesa la entrada de 3 bytes en 3 bytes y una entrada corta deja un resto que hay que rellenar.

Las reglas:

  • La longitud de una cadena Base64 válida es siempre múltiplo de 4.
  • 0, 1 o 2 signos de igual al final. Nunca más.
  • El relleno es parte de la cadena, no decoración. Quitarlo rompe la decodificación.

Un error habitual es recortar los signos de igual para que la cadena quede "más limpia". Funciona en algunos decodificadores y rompe otros, y nunca vale la pena el riesgo: déjalos donde están.

El error que te dice qué está mal

Una cadena Base64 incorrecta falla de una de dos maneras:

  1. Un carácter que no está en el alfabeto. La solución es encontrarlo y quitarlo: normalmente es un espacio, un salto de línea o un carácter de otra codificación.
  2. Una longitud que no es múltiplo de 4. La solución es devolver el relleno.

Un decodificador útil te dice cuál de las dos pasó. "No es Base64 válido" no ayuda. "El carácter ! no está permitido" y "la longitud debe ser múltiplo de 4" sí.

Una lista corta

  • Base64 es una codificación, no un candado. Cualquiera puede decodificarla.
  • Nunca la uses para esconder un secreto. Es la herramienta equivocada para eso, y no es una herramienta para eso.
  • Codifica primero como UTF-8 si el texto tiene acentos, emoji o caracteres no latinos.
  • Recorta los espacios en blanco antes de validar, para que las cadenas envueltas se decodifiquen.
  • Conserva el relleno. Los signos de igual son parte de la cadena.
  • La longitud es siempre múltiplo de 4. Es una comprobación rápida y fiable.
  • Funciona en tu navegador y no guarda ninguna copia de lo que pegas.
  • Para lo que tenga que seguir en secreto, usa una herramienta de cifrado de verdad, no una codificación.

Preguntas frecuentes

¿Base64 es cifrado?

No. Es una codificación y cualquiera puede revertirla. Base64 existe para que los datos binarios puedan viajar por sistemas que solo manejan texto, no para esconder secretos. No lo uses para ocultar una contraseña.

¿Admite acentos y emoji?

Sí. El texto se codifica como UTF-8 antes de Base64, así que los acentos, los emoji y la mayoría de los alfabetos sobreviven al viaje de ida y vuelta. Ese es el detalle que rompe muchos scripts de Base64 improvisados.

¿Por qué mi cadena Base64 tiene saltos de línea?

Herramientas antiguas envuelven la salida a 76 caracteres por seguridad de correo. El decodificador de Zashify ignora los espacios en blanco, así que una cadena envuelta se decodifica bien. Si escribiste el decodificador tú mismo, asegúrate de recortar los espacios antes de validar.

¿Qué pasa si la entrada no es Base64 válido?

El decodificador nombra el carácter no permitido o el relleno incorrecto, en lugar de devolver basura. Esa es la diferencia entre un error útil y uno silencioso.

Prueba estas herramientas

← Volver al blog