Saltar al contenido

Codificador y decodificador Base64

Codifica y decodifica texto y archivos en Base64. El texto va en UTF-8: lo que no es ASCII no se rompe. Opción para URL, data URL y descarga de lo decodificado.

Dirección
Tipo de entrada
0 caracteres · 0 líneas
Al activarlo se usan - y _ en lugar de + y /, y se omite el relleno = final. Actívalo para usarlo en URLs o nombres de archivo.

0 caracteres · 0 líneas

Los archivos se procesan solo en este dispositivo y nunca se suben a un servidor. Cómo funciona

Codificación y decodificación bidireccional entre Hello y la cadena Base64 SGVsbG8=

Cómo usarlo

En «Dirección» eliges entre «Codificar» y «Decodificar».

  • Codificar: con «Tipo de entrada» en «Texto», lo que escribas en «Texto original» aparece en «Resultado en Base64». Hello da SGVsbG8= y café da Y2Fmw6k=. Si cambias a «Archivo», aparece el recuadro para subir un archivo.
  • Decodificar: pega en «Cadena Base64» una cadena Base64 o una URL data: y en «Resultado decodificado» verás el texto original.

Junto al resultado están «Enviar el resultado a decodificar» y «Enviar el resultado a codificar», que llevan lo que acaba de salir a la entrada del sentido contrario. Vienen bien para deshacer al momento lo que has codificado y comprobar que coincide con el original.

La casilla «Compatible con URL (-_, sin relleno)» vale tanto para codificar texto como para decodificar. Al codificar archivos no existe esa opción.

Lo que se traduce son bytes, no letras

Base64 es una notación que convierte cada 3 bytes en 4 caracteres. Para codificar un texto, por tanto, primero hay que pasar sus caracteres a bytes, y esta herramienta lo hace siempre en UTF-8. En UTF-8 el carácter € ocupa 3 bytes, así que en Base64 son exactamente 4 caracteres: 4oKs.

Cuando el número de bytes no es múltiplo de 3, se añade = al final hasta completar el grupo de 4 caracteres. Eso es el relleno.

Original Bytes Resultado en Base64
a 1 YQ==
ab 2 YWI=
abc 3 YWJj
€ 3 4oKs
😀 4 8J+YgA==

Como 3 bytes se convierten en 4 caracteres, el resultado es más o menos un tercio más largo que el original. Es lo que crece un archivo cuando lo conviertes en data URL para incrustarlo en HTML o CSS.

La función btoa que traen los navegadores solo acepta caracteres con código entre 0 y 255, de modo que da error con cadenas que contengan caracteres fuera de ese intervalo, como € o los emojis. Esta herramienta no la usa: convierte directamente los bytes UTF-8, así que codifica cualquier carácter y al decodificar lo devuelve también como UTF-8.

Qué cambia la opción compatible con URL

Además de letras mayúsculas, minúsculas y cifras, el Base64 estándar usa los caracteres + y /, y = como relleno. Los tres significan otra cosa dentro de una URL, de modo que para meter el resultado en una dirección, en el valor de un parámetro o en un nombre de archivo hay que marcar «Compatible con URL (-_, sin relleno)». Es la notación que usan los JWT (JSON Web Token).

Original Sin la opción Con la opción
>>>??? Pj4+Pz8/ Pj4-Pz8_
a YQ== YQ

Al decodificar, la opción solo tiene que coincidir si la cadena contiene +, /, - o _. Si pegas Pj4-Pz8_ sin la opción, sale el error de carácter no válido -; si pegas Pj4+Pz8/ con la opción, el mismo error salta en +. Una cadena que no tiene ninguno de esos cuatro caracteres, como SGVsbG8=, se decodifica de las dos maneras. El relleno puede estar o no estar, con independencia de la opción (SGVsbG8 también se lee como Hello).

De archivo a data URL y de Base64 a archivo

Con «Tipo de entrada» en «Archivo» puedes arrastrar un archivo o elegirlo. Vale cualquier formato y el tamaño máximo es de 10 MB. El resultado es una data URL con el tipo de archivo delante, del estilo data:image/png;base64,iVBORw0KG..., lista para pegarla en una etiqueta img de HTML o en un url() de CSS. Si el navegador no reconoce el tipo de archivo, lo marca como application/octet-stream. Una data URL en notación compatible con URL no la leería el navegador, así que siempre se genera con la notación estándar y con relleno.

El camino de vuelta se hace en Decodificar. Al pegar Base64 o una data URL aparece junto al resultado el botón de descarga, y con él puedes guardar como archivo también lo que no es texto.

  • Si pegas una data URL, solo se lee lo que viene después de base64,, y en ese caso se interpreta con la notación estándar aunque la casilla compatible con URL esté marcada.
  • El archivo se llama decoded más una extensión. Si el tipo de la data URL es PNG, JPEG, GIF, WebP, SVG, ICO, PDF, TXT, CSV, JSON, ZIP, MP3 o MP4, lleva la extensión correspondiente (decoded.png, etc.).
  • Con cualquier otro tipo, o con Base64 a secas que no indica ninguno, se descarga como decoded.bin. Si sabes qué formato era, cámbiale la extensión después.
  • Una data URL sin ;base64, como data:text/plain,hello, no es Base64 y da el error de carácter no válido :.

Los tres errores al decodificar

Mensaje de error Con una entrada como Qué significa
Hay un carácter que no es válido en Base64 Pj4-Pz8_ (sin la opción) Hay un carácter que no existe en la notación elegida. El mensaje indica cuál es.
La longitud o el relleno (=) de Base64 no es válido SGVsb, SGVsbG8== El número de caracteres no cuadra, sobran = o hay alguno en medio. Es habitual cuando al copiar se corta el final.
Los bytes decodificados no son texto UTF-8 válido iVBORw0KGgo= El Base64 es correcto, pero el contenido no es texto.

En el tercer caso aparece junto al resultado «Ver en hexadecimal». Al pulsarlo se listan los bytes como pares de cifras hexadecimales, y «Ver como texto» devuelve a la vista anterior. El hexadecimal de iVBORw0KGgo= es 89 50 4e 47 0d 0a 1a 0a: los bytes del segundo al cuarto (50 4e 47) son las letras PNG, lo que delata que es el comienzo de un archivo PNG. Aunque se muestre este error, el botón de descarga sigue funcionando.

Fuentes

Preguntas frecuentes

¿Sirve Base64 para ocultar el contenido?

No. Base64 no cifra nada: solo cambia la forma de escribir los datos, y cualquiera puede deshacerlo sin ninguna clave. Basta pegar la cadena en Decodificar para ver el original. El propio RFC 4648, que define Base64, advierte de que este sistema solo hace que datos como una contraseña salten menos a la vista y no aporta confidencialidad. Guardar una contraseña o un token en Base64 no es una medida de protección.

¿Decodifica Base64 repartido en varias líneas, como el del código fuente de un correo o el de un certificado?

Sí. Los espacios y los saltos de línea se ignoran, así que no hace falta juntar las líneas. Eso sí, la cabecera y el pie de un archivo de certificado, del tipo -----BEGIN … -----, no son Base64: si los pegas también, saldrá el error de carácter no válido «-». Deja fuera esas dos líneas. En el sentido contrario, lo que esta herramienta codifica sale siempre en una sola línea sin saltos, por largo que sea.

Sé que el original era texto, pero me da el error de que no es UTF-8.

Lo más probable es que quien generó ese Base64 pasara los caracteres a bytes con una codificación que no era UTF-8. Esta herramienta interpreta los bytes decodificados únicamente como UTF-8 y, si no cuadran, da error en vez de enseñarte caracteres equivocados. Con «Ver en hexadecimal» puedes comprobar los bytes, y si descargas el archivo decoded.bin y lo abres en un editor que deje elegir la codificación, podrás leer el texto original.

Última actualización: