Saltar al contenido

Codificar a Base64

Texto, una imagen o cualquier archivo, convertido a Base64 correctamente. Los caracteres acentuados y los emojis se conservan, algo que las implementaciones habituales de una línea no consiguen. No se guarda nada.

  • Nunca se guarda
  • Sin filas ni esperas
  • Sin registro, sin marca de agua

El texto se codifica como UTF-8, así que los acentos y los emojis se conservan.

Base64

Aquí aparece: Base64.

Cómo funciona

1

Pega texto o suelta un archivo

El texto se codifica como UTF-8. Un archivo se codifica byte a byte y nunca se guarda.

2

Elige la variante

Base64 estándar, Base64URL apto para URL para tokens y query strings, o un data URI completo listo para pegar en CSS o en una etiqueta <img>.

3

Cópialo

Copia el resultado o, si es grande, descárgalo como archivo de texto.

Por qué crece exactamente un tercio

Base64 toma tres bytes a la vez y los escribe como cuatro caracteres, cada uno con seis de los veinticuatro bits. Cuatro dividido entre tres: de ahí sale el famoso 33 por ciento. Es aritmética, no ineficiencia, y ningún codificador lo hace mejor sin salir del rango imprimible. Cuando los datos no se dividen exactamente en grupos de tres, el último grupo se rellena y se marca con uno o dos signos =, y por eso la longitud de cualquier cadena Base64 es siempre múltiplo de cuatro.

Hay dos alfabetos, y elegir el equivocado es el problema más común que la gente trae aquí. El alfabeto estándar termina en + y /, y ambos tienen significado en una URL: el signo más se convierte en espacio en una query string y la barra parece un separador de ruta. La variante apta para URL usa - y _ en su lugar, y es la que usan los JSON Web Tokens, los nombres de archivo y todo lo que aparece en una dirección. Por lo demás son idénticos, y un valor codificado con uno y decodificado con el otro falla de formas que parecen datos corruptos.

El corte de líneas es el otro detalle que depende del contexto. Los adjuntos de correo esperan líneas de 76 caracteres, los certificados y claves PEM esperan 64, y un data URI o un campo JSON no espera ningún salto. Aquí está desactivado por defecto porque hoy lo habitual es sin cortes; actívalo cuando el destino sea un encabezado de correo o un bloque -----BEGIN-----, que rechazará una sola línea enorme.

Base64 no es cifrado y no ofrece ninguna protección. Es un cambio de alfabeto: cualquiera puede revertirlo al instante, y cualquier escáner de seguridad lo hace automáticamente. Su propósito es transportar datos binarios por canales que solo aceptan texto: cuerpos de correo, campos JSON, documentos XML, data URI en una hoja de estilos. Usarlo para esconder una contraseña en la configuración no le oculta nada a quien mire.

Si buscas otra cosa

En la línea de comandos, base64 -w 0 file.bin codifica sin cortar líneas en Linux y base64 a secas hace lo mismo en macOS, mientras que openssl base64 -A funciona igual en todas partes. Para el alfabeto apto para URL, basenc --base64url es el que lo hace bien sin un paso de sustitución.

Para archivos grandes, todo lo de esta página es el enfoque equivocado: el archivo completo se mantiene en memoria, y codificarlo lo infla un tercio antes de que pase cualquier otra cosa. Las herramientas de línea de comandos procesan por flujo, y en código todos los lenguajes tienen un codificador incremental. También conviene preguntarse si el Base64 hace falta: enviar el binario como multipart/form-data o como cuerpo sin procesar evita tanto el consumo de memoria como el 33 por ciento.

Preguntas frecuentes

¿Se guarda mi texto o mi archivo en algún lugar?

No. No se guarda nada, no se registra nada y ningún servidor lo ve nunca, y sigue funcionando con la red desconectada. En estas herramientas en particular, eso no es un detalle menor. Lo que la gente pega en codificadores y decodificadores en línea suele estar vigente: tokens de sesión, claves de API, encabezados Authorization, datos de clientes. Pegar algo así en una página que lo envía a alguna parte es una filtración, prometa lo que prometa el sitio sobre borrarlo.

¿Por qué aquí funcionan los caracteres acentuados y los emojis?

Porque el texto se convierte a bytes UTF-8 antes de codificarlo, que es el orden correcto y el paso que se saltan la mayoría de las implementaciones rápidas. El `btoa` del propio navegador no acepta texto en absoluto: toma un byte por carácter, así que `btoa("café")` directamente lanza un error. El truco más difundido, `btoa(unescape(encodeURIComponent(s)))`, funciona por casualidad y se desmorona con los emojis y otros caracteres fuera del rango básico. Esta página codifica UTF-8 como corresponde, una sola vez, así que 日本語 y 🎉 pasan y se decodifican de vuelta idénticos.

¿Qué es Base64URL y cuándo lo necesito?

Es Base64 con dos caracteres cambiados: + pasa a ser -, / pasa a ser _, y se elimina el relleno = final. Existe porque +, / y = significan algo en una URL, así que el Base64 normal se estropea cuando viaja en una query string o en una ruta. Los JWT, los tokens OAuth y todo lo que va en una URL usan Base64URL. Si vas a poner el resultado en un enlace, elígelo.

¿Base64 cifra o protege algo?

No, y conviene decirlo sin rodeos. Base64 es una codificación, no un cifrado: no hay clave ni secreto. Cualquiera que vea la cadena puede decodificarla en un paso, también en este sitio. Existe para transportar datos binarios de forma segura por canales que solo aceptan texto, como los adjuntos de correo y los data URI. Si algo tiene que mantenerse en secreto, necesita cifrado; Base64 no ofrece ninguna protección.

¿Por qué el Base64 es más grande que mi archivo?

Alrededor de un 33 % más grande, siempre. Base64 representa cada 3 bytes como 4 caracteres de texto, así que el tamaño crece un tercio por diseño, más un poco de relleno. Ese es el precio de convertir binario en texto, y es la razón por la que incrustar una imagen grande como data URI en tu CSS suele ser un mal negocio.

¿Puedo codificar una imagen como data URI?

Sí: suelta la imagen y elige “Data URI”. Obtienes la cadena `data:image/png;base64,…` completa, con el tipo de medio correcto ya indicado, lista para pegar en una hoja de estilos, una etiqueta <img> o una plantilla de correo.

¿Hay un límite de tamaño?

La memoria disponible, no un tope de tamaño fijo, y es generoso: los archivos de muchos megabytes se codifican sin problema. La codificación se hace por fragmentos precisamente para manejar archivos grandes; la implementación obvia falla alrededor de los 125 KB con “Maximum call stack size exceeded”, un error que tienen muchísimos codificadores en línea.

Conviene saber: Base64 hace que los datos ocupen alrededor de un 33 % más: es el formato, no un fallo. Los archivos se leen completos en memoria, así que uno muy grande puede agotar una pestaña del celular antes de terminar. El corte de líneas está desactivado por defecto; los formatos de correo y PEM lo esperan activado.

Agrega esta herramienta a tu sitio web

Gratis para cualquier blog, página de clase o artículo de ayuda. Pega un fragmento de código y tus visitantes podrán usarla directamente en tu página.