Toolbit

Codificador y decodificador Base64

Codifica texto a Base64 y decodifica Base64 a texto, con soporte para UTF-8, la variante base64url y padding opcional.

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.

ValoresSímbolosNotas
0 – 25A – Z
26 – 51a – z
52 – 610 – 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í, ñ produce w7E= 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 entradaCaracteres Base64
14
24
34
1016
100136
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 simplemente usuario:clave en 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.

Preguntas frecuentes

¿Base64 sirve para proteger información?

No. Base64 es una codificación, no un cifrado: no usa ninguna clave y cualquiera puede revertirla en un instante. Sirve para transportar bytes por canales de texto. Para proteger datos hace falta cifrarlos (por ejemplo, con AES) o, en el caso de contraseñas, guardarlas con un hash lento como bcrypt o Argon2.

¿Por qué algunos textos en Base64 terminan en = o ==?

Porque Base64 trabaja en bloques de 3 bytes. Si al final sobra 1 byte, el último bloque de 4 caracteres se completa con ==; si sobran 2 bytes, con un solo =. Cuando la cantidad de bytes es múltiplo de 3, no hay relleno. La variante base64url suele omitir ese relleno.

¿Por qué el mismo texto da un Base64 distinto en otra herramienta?

Las causas habituales son tres: un salto de línea extra al final (echo sin -n), una codificación de caracteres distinta (Latin-1 en vez de UTF-8, que cambia el resultado para letras como ñ o á) o el uso de la variante base64url, que reemplaza + y / por - y _. Esta herramienta siempre usa UTF-8 y no agrega saltos de línea.