Cómo decodificar Base64
- Pega el Base64 en el cuadro Entrada · Base64. Los saltos de línea, los espacios, las comillas alrededor y un prefijo
data:...;base64,pueden quedarse; el decodificador los elimina. - El texto decodificado aparece en Salida · texto. Una línea de estado indica Base64 válido, la variante (Standard o Base64URL), el número de bytes decodificados y, en Parece, el tipo de contenido detectado.
- Si el texto sale estropeado, cambia Juego de caracteres o elige Detección automática.
- Si el contenido es JSON, Formatear JSON lo indenta para leerlo mejor.
- Pulsa Copiar salida, o Descargar para guardar los bytes decodificados como archivo. La extensión sigue al tipo detectado, así que el JSON se guarda como
decoded.jsony un PNG comodecoded.png.
Intercambiar devuelve el texto decodificado a la entrada y cambia a codificar, una forma rápida de confirmar que la cadena va y vuelve sin cambios.
Qué acepta el decodificador
El Base64 rara vez llega limpio. Viene cortado a 76 caracteres desde un correo, entre comillas desde un archivo JSON, codificado con porcentajes desde una URL o sin relleno desde un token. El decodificador acepta todo eso sin ningún ajuste:
| Pegas | Obtienes | Qué ha pasado |
|---|---|---|
SGVsbG8gV29ybGQ | Hello World | Se restaura el = que faltaba y la línea de estado lo indica |
8J-Riw | 👋 | Se reconocen - y _ URL-safe, y la variante aparece como Base64URL |
data:text/plain;base64,SGk= | Hi | Se quita el prefijo de data URI |
"SGVsbG8=" | Hello | Se quitan las comillas de código o JSON |
SGVsbG8%3D | Hello | El %3D codificado para URL se lee como = |
SGVs (salto de línea) bG8= | Hello | Se ignoran los saltos de línea y los espacios |
El decodificador es tolerante con este envoltorio y estricto con todo lo demás: un carácter fuera del alfabeto lo detiene, con un error que nombra el carácter y su posición. Algunas bibliotecas se saltan en silencio los caracteres erróneos y te devuelven una salida corrupta (consulta la sección de código más abajo).
Para tokens URL-safe en concreto, el decodificador Base64URL explica el alfabeto y Base64 frente a Base64URL las diferencias.
Cuando el Base64 decodificado es un archivo
Base64 transporta cualquier byte, y muchas cadenas Base64 son imágenes o documentos. La herramienta compara los primeros bytes de los datos decodificados con firmas de archivo conocidas (números mágicos) y muestra el resultado en Parece: PNG, JPEG, PDF, ZIP, gzip, JSON, XML y muchos más. Con los formatos binarios muestra una vista previa imprimible, indica que los datos son binarios y enlaza a la herramienta adecuada, como Base64 a imagen o Base64 a PDF. Descargar guarda los bytes originales en cualquier caso.
El principio de una cadena Base64 suele delatar el formato antes de decodificarla:
| El Base64 empieza por | Bytes decodificados | Formato |
|---|---|---|
iVBORw0KGgo | 89 50 4E 47 0D 0A 1A 0A | Imagen PNG |
/9j/ | FF D8 FF | Imagen JPEG |
JVBERi0 | %PDF- | Documento PDF |
UEsDBA | PK 03 04 | ZIP, también DOCX y XLSX |
H4sI | 1F 8B 08 | Datos gzip (decodificador de Base64 con gzip) |
eyJ | {" | JSON, a menudo un segmento de JWT |
PD94bWwg | <?xml | XML |
Hay más firmas en prefijos Base64 habituales. Para un archivo de tipo desconocido, Base64 a archivo detecta el formato y lo previsualiza.
Juegos de caracteres: arreglar texto estropeado
Base64 guarda bytes y no dice nada del juego de caracteres que convirtió los caracteres en esos bytes. El decodificador supone UTF-8, que es lo correcto para la mayoría de los datos modernos. Cuando se equivoca, los síntomas son reconocibles:
- Caracteres
�y el aviso «Algunos bytes no son UTF-8 válido». El texto viene de un juego de caracteres heredado.Y2Fm6Q==se lee comocaf�en UTF-8 y comocaféen ISO-8859-1 o Windows-1252. Un texto ruso comoz/Do4uXynecesita Windows-1251 para mostrarПривет. - Un punto o un hueco detrás de cada letra. Es UTF-16, donde las letras ASCII van seguidas de un byte cero.
SABlAGwAbABvAA==esHelloen UTF-16LE (Base64 a UTF-16). é,üo’en la salida. La decodificación es correcta; el texto se codificó dos veces antes de pasarlo a Base64, porque algún paso anterior leyó UTF-8 como Latin-1 y volvió a guardar el resultado como UTF-8.Y2Fmw4PCqQ==se decodifica exactamente comocafé. Arréglalo en el origen.
Detección automática busca una marca de orden de bytes, luego comprueba si los bytes son UTF-8 válido y después busca el patrón de bytes cero de UTF-16. Las páginas de códigos de un byte como Windows-1251 y KOI8-R se parecen demasiado para cualquier detector, así que elígelas a mano cuando conozcas el origen.
Mensajes de error y qué significan
| Mensaje | Causa habitual | Solución |
|---|---|---|
| Carácter no válido “.” en la posición 21 | Se ha pegado un JWT entero: los puntos separan tres segmentos | Decodifica un solo segmento o usa el decodificador JWT |
Carácter no válido "\\" en la posición 8 | Base64 copiado de un JSON donde / se escapó como \/ | Sustituye \/ por / |
| La entrada mezcla caracteres estándar (+ /) y URL-safe (- _) | Dos cadenas unidas o una conversión a medias | Pásalo a un solo alfabeto con Base64URL a Base64 |
| El relleno (=) solo puede aparecer al final | Dos valores Base64 pegados, como SGk=SGk= | Sepáralos y decodifica cada uno |
| Longitud incorrecta: sobra o falta un carácter | Al copiar se perdió o se añadió un carácter | Vuelve a copiarlo o prueba Reparar Base64 |
La guía de errores de Base64 repasa cada caso con más detalle. Para encontrar el carácter o el problema de relleno exacto de una cadena, usa el validador de Base64.
Decodificar Base64 en JavaScript, Python y la línea de comandos
atob() devuelve una «cadena binaria» con un carácter por byte, así que el texto UTF-8 necesita un paso con TextDecoder. atob acepta la falta de relleno, pero lanza InvalidCharacterError con los - y _ URL-safe.
const s = "R3LDvMOfZSDwn5GL";
new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
// "Grüße 👋"
// Node.js accepts both alphabets
Buffer.from(s, "base64").toString("utf8"); // "Grüße 👋"
Buffer.from("8J-Riw", "base64url").toString("utf8"); // "👋"
Python lanza binascii.Error: Incorrect padding con entradas sin relleno, así que añádelo tú:
import base64
s = "SGVsbG8"
base64.b64decode(s + "=" * (-len(s) % 4)).decode("utf-8")
# 'Hello'
base64.b64decode("SGVs*bG8=", validate=True)
# binascii.Error: Only base64 data is allowed
Sin validate=True, Python descarta el * y devuelve b'Hello'. Buffer.from de Node se comporta igual, así que una cadena dañada puede decodificarse sin ningún error.
En la línea de comandos:
printf '%s' 'R3LDvMOfZSDwn5GL' | base64 -d
base64 -d message.b64 > message.bin
La primera línea imprime Grüße 👋. Las versiones antiguas de macOS escriben la opción como -D. Más detalles por lenguaje: JavaScript, Node.js, Python, PHP.
Preguntas frecuentes
¿Cómo decodifico una cadena Base64?
Pégala en el cuadro de entrada de arriba; el texto decodificado aparece al instante. En código, decodifica el Base64 a bytes y luego lee esos bytes como UTF-8: base64.b64decode(s).decode() en Python, Buffer.from(s, "base64").toString() en Node.js.
¿Por qué mi texto decodificado muestra caracteres raros como � o é?
� significa que los bytes no son UTF-8 válido, así que probablemente el texto se codificó con otro juego de caracteres; prueba Windows-1252, Windows-1251 o UTF-16LE en el menú Juego de caracteres. é en lugar de é significa que el texto ya estaba estropeado antes de que alguien lo codificara.
¿Puedo decodificar Base64 sin el relleno =?
Sí. El decodificador añade él mismo el = que falta y lo indica en la línea de estado. El relleno solo completa el último bloque, así que siempre se puede restaurar a partir de la longitud.
¿Está roto el Base64 si la salida decodificada no tiene sentido?
Lo más frecuente es que los datos sean un archivo. Mira el campo Parece de la línea de estado: para imágenes, PDF, archivos comprimidos y otros formatos binarios, la herramienta enlaza a un decodificador que previsualiza o guarda el archivo.
¿Se puede decodificar Base64 sin una clave?
Siempre. Base64 es una codificación con un alfabeto público, así que no ofrece ningún secreto. Si el resultado decodificado sigue pareciendo aleatorio, los datos se cifraron o se comprimieron antes de codificarlos.