Decodificar y codificar Base64: a PDF, imagen o archivo

Pegue Base64 y recupere el archivo, sea un PDF, una imagen, texto o un JWT, o suelte un archivo para obtener su Base64. Todo ocurre en esta pestaña.

33 formatos de archivo reconocidos por sus propios bytes · RFC 4648 · no se sube nada
Codificado

Pegue algo arriba, suelte un archivo en la tarjeta o pulse uno de los ejemplos.

Pruebe

Todo se queda en esta pestaña: nada de lo que usted pega o suelta se sube, y el HTML o el script decodificado se muestra como texto, nunca se ejecuta.

3 bytes → 4 caracteres
Ejemplo: Man
M77 · 4DByte 1
a97 · 61Byte 2
n110 · 6EByte 3
1922546

Tres bytes son 24 bits. Base64 corta esos mismos 24 bits en cuatro grupos de seis, y cada grupo nombra uno de 64 caracteres. Las líneas blancas marcan dónde terminan los bytes: no coinciden con los grupos, y en eso está todo el truco.

Carácter 1

16 + 2 + 1 = 19 T

Índice 19 en el alfabeto estándar.

1donde termina un byteagregado, no suyodistinto en seguro para URLSeñale un carácter para ver cómo se suman sus seis bits.

Cómo usar el decodificador y codificador Base64

Pegue cualquier cosa en el único campo (texto, Base64, una data: URI completa o un JWT), o pulse Elegir un archivo o suelte uno sobre la tarjeta. La herramienta averigua en qué dirección va, lo indica en la etiqueta y deja la otra lectura a un clic.

Al decodificar un archivo, obtiene el tipo leído de los propios bytes, el tamaño, el tamaño en píxeles de una imagen, una Vista previa de una imagen o un PDF, y una descarga con la extensión correcta. Al codificar uno, obtiene el Base64, una data: URI lista para usar y lo que la codificación cuesta en tamaño. Las opciones Alfabeto, Relleno y Saltos de línea bajo el resultado cambian la salida.

Decodificador Base64: Base64 pegado y decodificado a un documento PDF, con su tipo, tamaño y la figura 3 bytes → 4 caracteresDecodificador Base64: Base64 pegado y decodificado a un documento PDF, con su tipo, tamaño y la figura 3 bytes → 4 caracteresUn campo, en ambas direccionesPegue texto, Base64, una data: URI o un JWT. La etiqueta indica cómo se leyó; el menú lo cambia.Elegir un archivoO suelte uno en cualquier parte de la tarjeta: se convierte en Base64 y en una data: URI, sin salir de la pestaña.Qué son los bytesAl decodificar, el resultado empieza con el tipo, el tamaño y la firma del archivo, y luego una vista previa y una descarga.Opciones de salidaAlfabeto estándar o seguro para URL, con o sin relleno, y líneas cortadas para MIME o PEM.3 bytes → 4 caracteresSus propios bytes, vueltos a cortar en grupos de seis. Señale un carácter para ver cómo se suman sus bits.
La herramienta decodificando un PDF. Seleccione un número para ver qué hace cada parte.

¿Qué es Base64 y por qué existe?

Base64 escribe cualquier byte con 64 caracteres que sobreviven en cualquier parte: A–Z, a–z, 0–9, + y /. Existe porque el correo electrónico, las URL, JSON y XML se crearon para texto, y un byte en bruto puede ser un código de control, una comilla o un byte nulo que los rompe.

Toma tres bytes a la vez, pone sus 24 bits en fila y corta la fila en cuatro grupos de seis. Seis bits dan 64 valores, así que cada grupo nombra exactamente un carácter. Tres bytes de entrada, cuatro caracteres de salida, siempre: por eso Base64 es aproximadamente un tercio más grande que lo que entró.

Man → TWFu
M77 · 4DByte 1
a97 · 61Byte 2
n110 · 6EByte 3
1922546TWFu

Tres bytes son 24 bits. Base64 los vuelve a cortar en cuatro grupos de seis, y cada grupo nombra uno de 64 caracteres imprimibles, así que tres bytes siempre cuestan cuatro caracteres. De ahí sale el aumento del 33 %.

Ma → TWE=
M77 · 4DByte 1
a97 · 61Byte 2
sin byte—Byte 3
19224—TWE=

Dos bytes son 16 bits. Base64 agrega 2 bits en cero para completar el tercer grupo, y un = ocupa el lugar del cuarto carácter.

M → TQ==
M77 · 4DByte 1
sin byte—Byte 2
sin byte—Byte 3
1916——TQ==

Un byte son 8 bits. Base64 agrega 4 bits en cero para completar el segundo grupo, y dos = ocupan el lugar del tercer y el cuarto carácter. = no lleva ningún bit.

Las líneas blancas marcan dónde termina un byte y empieza el siguiente. No coinciden con los grupos de seis, y ese desfase es todo el mecanismo. Fuente: RFC 4648 §4

¿Cómo decodificar Base64 a PDF?

Pegue la cadena y la herramienta reconstruye el PDF: muestra la versión y el tamaño, abre el documento en el visor de PDF de su propio navegador y le ofrece una descarga. No tiene que decir que es un PDF ni quitar antes un prefijo data:.

Un PDF se reconoce por sus cinco primeros bytes, %PDF-, así que el archivo se identifica aunque su nombre, el tipo que declaró el remitente o el campo del que vino digan otra cosa. Si los bytes no son un PDF, la página dice qué son en lugar de fallar al abrir un documento que nunca existió.

El paso de Base64 a PDF ocurre en su navegador, donde se reconstruye el archivo. No se sube nada, lo cual importa cuando el PDF es un recibo de sueldo, un contrato o una factura.

JSON de una API"document": "JVBERi0xLjcKJeLjz9MKMS…"Un campo en una respuesta. Las comillas no forman parte del Base64.
Un adjunto de correoContent-Transfer-Encoding: base64MIME corta el cuerpo a 76 caracteres por línea. Péguelo con los saltos de línea: se omiten.
Una data: URIdata:application/pdf;base64,JVBERi0x…Péguela completa. El prefijo se lee, no se quita a mano.
Los primeros bytes dicen qué es
  1. 25%
  2. 50P
  3. 44D
  4. 46F
  5. 2D-
  6. 311
  7. 2E.
  8. 377

Los primeros 5 bytes, %PDF-, son toda la firma. Los bytes 6 a 8 son la versión: 1.7. No interviene ninguna extensión de archivo, así que un PDF al que alguien llamó .txt vuelve igualmente como PDF.

Tres lugares de donde se copia un PDF en Base64, y los bytes que lo identifican una vez decodificado. Fuente: ISO 32000-1:2008 §7.5.2, RFC 8118 §8

¿Cómo convertir una imagen a Base64, y cuándo conviene hacerlo?

Suelte la imagen y obtendrá su Base64 y una data: URI lista para pegar en HTML o CSS. Si conviene hacerlo es la pregunta difícil: Base64 siempre cuesta aproximadamente un tercio más, y una imagen incrustada no se puede guardar en caché por separado.

En la dirección contraria, de Base64 a imagen, obtiene el formato, el tamaño y el tamaño real en píxeles leído del encabezado del propio archivo, no de la imagen en pantalla, además de una descarga con la extensión correcta.

  • El archivo en disco12,9 kB 100 %
  • Como Base6417,3 kB +33,4 %
  • Cortado a 76 caracteres para MIME17,5 kB +35,1 %
  • El archivo, comprimido con gzip11,7 kB -9,5 %
  • El Base64, comprimido con gzip12,5 kB -3,2 %
Un archivo real
  • se descarga una vez
  • lo guardan en caché el navegador y la CDN
  • se carga junto a la página, no dentro de ella
La misma imagen incrustada
  • un tercio más grande antes de comprimir
  • en caché solo como parte del archivo que la contiene
  • se analiza como parte de la hoja de estilos o del HTML

La compresión recupera la mayor parte: comprimido con gzip, el Base64 es solo un 7 % más grande que el archivo comprimido. Lo que no puede devolver es la entrada de caché propia de la imagen: incrustada en una página HTML, se vuelve a descargar con cada página que la lleva.

La regla práctica: incruste unos pocos cientos de bytes (un icono, un espaciador, un logo en un correo) y enlace todo lo que sea más grande. Esta imagen PNG de 12,9 kB ya pasa del límite.

Medido en la imagen que decodifica el ejemplo de la herramienta: los mismos bytes, llevados de cinco formas, comprimidos con gzip al nivel más alto. Fuente: RFC 2045 §6.8

Base64 frente a Base64 seguro para URL: ¿cuál es la diferencia?

El Base64 seguro para URL (RFC 4648 §5) es la misma codificación con dos caracteres cambiados: + pasa a ser - y / pasa a ser _. El relleno también se suele omitir.

Úselo siempre que el resultado vaya en una URL, un nombre de archivo o una cookie. Los JSON Web Tokens lo usan de principio a fin, por eso las partes de un token nunca terminan en =. Esta herramienta lee ambos alfabetos y le avisa cuando una cadena lleva los dos.

Estándar (RFC 4648 §4)+/8=
Seguro para URL (RFC 4648 §5)-_8=
base64url en un JWT (RFC 7515 §2)-_8
  • + → -Índice 62. En una cadena de consulta, un decodificador de formularios lee + como un espacio, y los datos llegan alterados.
  • / → _Índice 63. En una ruta, / empieza un segmento nuevo, y el valor se parte en dos.
  • = eliminadoEn una URL, = suele codificarse por porcentaje como %3D (RFC 4648 §5). Un JWT lo elimina por completo (RFC 7515 §2): la longitud por sí sola dice dónde terminan los bytes.

Los primeros 62 caracteres de los dos alfabetos son idénticos: por eso una herramienta que lee ambos alfabetos puede decodificar cualquiera de los dos, y por eso esta página le avisa cuando una cadena lleva ambos.

Solo 2 caracteres cambian entre los dos alfabetos. Todo lo demás es igual. Fuente: RFC 4648 §5, RFC 7515 §2

¿Base64 es cifrado? No.

Base64 no oculta nada. No hay clave ni secreto, y revertirlo no cuesta ningún esfuerzo: para “descifrar” Base64 basta un decodificador como este, que lo hace mientras usted escribe.

Donde más importa es en la autenticación HTTP Basic: el encabezado lleva el nombre de usuario y la contraseña como una sola cadena Base64, legible para cualquiera que la vea, y por eso el RFC 7617 solo considera segura esta autenticación sobre una conexión cifrada como TLS. Si algo debe seguir siendo ilegible, necesita cifrado. Base64 solo hace pasar bytes sin daño por un canal pensado para texto.

Un encabezado Authorization, tal como lo construye el RFC 7617 §2

Authorization: Basic dXNlcjpwYXNzd29yZA==

Un paso atrás: no hace falta clave, no hace falta contraseña

user:password

El RFC 7617 construye el encabezado paso a paso, y el último paso es toda su “protección”: el cliente “obtiene las basic-credentials codificando esta secuencia de octetos con Base64”. Su §1 dice lo que eso significa: a menos que TLS o un sistema similar proteja la conexión, “el identificador de usuario y la contraseña se transmiten por la red como texto en claro”. Base64 no tiene clave, así que no hay nada que romper: quien tiene la cadena tiene la contraseña.

Las credenciales de arriba son inventadas. Recuperarlas requiere un paso y ninguna clave: eso es lo que significa “codificación, no cifrado”. Fuente: RFC 7617 §2, §1

¿Por qué mi texto decodificado sale con caracteres raros (mojibake)?

Porque Base64 lleva bytes, y los bytes solo se vuelven letras cuando algo elige una codificación de caracteres. Lea texto UTF-8 como si fuera ISO-8859-1 y é se convierte en é; lea ISO-8859-1 como UTF-8 y se convierte en un carácter de reemplazo.

Una data: URI puede declarar su charset, y esta página lee el texto en ese charset en lugar de forzarlo todo a UTF-8. Si su navegador no tiene un decodificador para el declarado, la página lo dice en lugar de mostrarle en silencio las letras equivocadas.

“Café” escrito en UTF-8436166C3A9
“Café” escrito en ISO-8859-1436166E9

En UTF-8, é ocupa 2 bytes; en ISO-8859-1, 1 byte. Base64 lleva bytes, no letras, así que la cadena por sí sola no puede decirle a un decodificador cuál se quiso usar.

Leído correctamenteCafé
Bytes UTF-8 leídos como ISO-8859-1Café
Bytes ISO-8859-1 leídos como UTF-8Caf�
El mojibake tiene dos formas: un sinsentido legible (Café) cuando UTF-8 se lee como una página de códigos de un byte, y un carácter de reemplazo (Caf�) cuando los bytes ni siquiera son UTF-8 válido. Fuente: RFC 4648 §4, RFC 2397 §4

Base64 en Python, JavaScript, Java, C#, Go, PowerShell y el shell

Todos los lenguajes traen Base64 integrado. Las trampas son las mismas en todas partes: codifique bytes, no una cadena, y diga en qué codificación de caracteres está el texto.

El btoa() de JavaScript es el punto más delicado: solo acepta caracteres hasta U+00FF, así que todo lo que vaya más allá de Latin-1 tiene que convertirse primero en bytes UTF-8 con TextEncoder. Cada ejemplo de abajo codifica y decodifica “Man” y se ejecutó para comprobar su salida.

import base64

b64 = base64.b64encode("Man".encode("utf-8")).decode("ascii")
print(b64)                                    # TWFu
print(base64.b64decode(b64).decode("utf-8"))  # Man

Ejecutado con Python 3.14.4 el 26 de octubre de 2026: imprime lo que muestran los comentarios.

Cada fragmento se ejecutó con “Man” e imprime lo que muestran sus comentarios. El base64 -d del shell es -D en versiones antiguas de macOS. Fuente: gnu.org, developer.mozilla.org

El alfabeto Base64, del 0 al 63

Cada grupo de seis bits es un número del 0 al 63, y esta es la tabla en la que se busca. Base64 distingue mayúsculas de minúsculas: A es 0 y a es 26, así que cambiar una letra de mayúscula a minúscula, o al revés, rompe la cadena.

Vale la pena reconocerlo a simple vista: una serie de A es una serie de bytes en cero, y una cadena Base64 que empieza por JVBER es un PDF, por iVBOR un PNG y por /9j/ un JPEG.

  1. A0
  2. B1
  3. C2
  4. D3
  5. E4
  6. F5
  7. G6
  8. H7
  9. I8
  10. J9
  11. K10
  12. L11
  13. M12
  14. N13
  15. O14
  16. P15
  17. Q16
  18. R17
  19. S18
  20. T19
  21. U20
  22. V21
  23. W22
  24. X23
  25. Y24
  26. Z25
  27. a26
  28. b27
  29. c28
  30. d29
  31. e30
  32. f31
  33. g32
  34. h33
  35. i34
  36. j35
  37. k36
  38. l37
  39. m38
  40. n39
  41. o40
  42. p41
  43. q42
  44. r43
  45. s44
  46. t45
  47. u46
  48. v47
  49. w48
  50. x49
  51. y50
  52. z51
  53. 052
  54. 153
  55. 254
  56. 355
  57. 456
  58. 557
  59. 658
  60. 759
  61. 860
  62. 961
  63. +Seguro para URL: -62
  64. /Seguro para URL: _63

0–25 son A–Z, 26–51 son a–z, 52–61 son 0–9. Solo los dos últimos caracteres de la tabla cambian entre los dos alfabetos, marcados arriba. = ni siquiera está en la tabla: no es un valor, es la marca que indica que el último grupo de tres bytes quedó corto.

Los 64 caracteres, en el orden que da el RFC 4648 §4. El número bajo cada uno es el valor de seis bits que representa. Fuente: RFC 4648 §4

Base64: preguntas y respuestas

¿Qué es decodificar Base64?

Decodificar Base64 convierte cada grupo de cuatro caracteres de nuevo en los tres bytes que representa. Esos bytes pueden ser texto o un archivo completo, como un PDF, una imagen PNG o un archivo ZIP. Esta herramienta lee los primeros bytes para saber cuál es, luego le muestra el texto o el archivo en sí en lugar de una pantalla de símbolos, y le permite descargarlo.

¿Cómo decodifico un archivo Base64?

Pegue la cadena Base64 en el campo. La herramienta la decodifica, compara los primeros bytes con las firmas de archivo que conoce (33 formatos de archivo en total), nombra el formato, muestra la vista previa de una imagen o un PDF y le ofrece una descarga con la extensión correcta. Nunca tiene que decir qué tipo de archivo es, y no se sube nada para averiguarlo.

¿Para qué se usa Base64?

Lleva bytes por lugares pensados para texto: adjuntos de correo (MIME), data: URI en HTML y CSS, campos binarios en JSON y XML, JSON Web Tokens, autenticación HTTP Basic, y certificados y claves en archivos PEM. En cada caso, los datos tienen que pasar por un canal que podría alterar o descartar bytes en bruto, así que viajan como simples letras y dígitos.

¿Base64 es cifrado?

No. Base64 es una codificación, no un cifrado: no tiene clave ni secreto, y cualquiera puede revertirlo en un instante, como hace esta página mientras usted escribe. Trate todo lo escrito en Base64 como si estuviera a la vista. Si los datos deben seguir siendo privados, cífrelos primero y luego codifique los bytes cifrados en Base64 si tienen que viajar como texto.

¿Es seguro decodificar Base64 en línea?

En esta página, sí, y usted puede comprobarlo: todo se decodifica con JavaScript en su propia pestaña del navegador y nada de lo que pega o suelta se sube. El HTML, el SVG y los scripts decodificados se muestran como texto, nunca se ejecutan; una imagen o un PDF se muestra en el propio visor de su navegador. Abra la pestaña Red de las herramientas de desarrollo mientras la usa: ninguna solicitud lleva sus datos.

¿Por qué Base64 es un 33 % más grande que el original?

Porque cada tres bytes se convierten en cuatro caracteres, y cuatro dividido entre tres da 1,33. Al final se pueden agregar hasta dos caracteres de relleno =, y cortar las líneas a 76 caracteres para el correo agrega un salto de línea en cada línea, así que una cadena larga suele ser aproximadamente un 35 % más grande que los bytes que lleva. Una compresión como gzip recupera la mayor parte.

¿Qué es Base64 seguro para URL?

Es Base64 en el que + se reemplaza por - y / por _, como lo define el RFC 4648 §5, para que el resultado pueda ir en una URL, un nombre de archivo o una cookie sin escaparlo. El relleno también se suele quitar, como en los JSON Web Tokens. Esta herramienta lee ambos alfabetos, incluso mezclados en una misma cadena, y puede escribir cualquiera de los dos.

¿Por qué falla la decodificación de mi Base64?

Cuando aparece “la entrada no es una cadena Base64 válida porque contiene un carácter que no es base 64”, casi siempre se debe a un solo carácter: unos puntos suspensivos donde un chat cortó la cadena, una comilla tipográfica de un procesador de texto o un espacio de no separación de un PDF. Esta herramienta nombra el carácter, muestra su posición, dice cuánto se decodificó bien antes y ofrece “Quitarlo y decodificar” si el resto aún se puede decodificar.

¿Puedo convertir Base64 a imagen?

Sí. Pegue la cadena, con o sin un prefijo como data:image/png;base64,, y la imagen aparece con su formato, su tamaño y su tamaño real en píxeles, leído del encabezado del propio archivo. Luego descárguela con la extensión correcta. PNG, JPEG, GIF, WebP, BMP, ICO y AVIF tienen vista previa; un SVG se muestra primero como texto, porque un SVG puede llevar script.

¿Qué significa el = al final de Base64?

Significa que el último grupo de tres bytes quedó incompleto. Dos bytes sobrantes se convierten en tres caracteres y un =, y un byte sobrante, en dos caracteres y ==. El relleno no lleva ningún dato: solo le indica a un decodificador dónde terminan los bytes. Muchos decodificadores, este incluido, también leen Base64 al que se le quitó el relleno.

¿Hay un límite de tamaño?

Un archivo que usted elija o suelte puede tener hasta 10 MB; uno más grande se rechaza indicando su nombre y tamaño, nunca se lee a medias. El límite para el texto pegado es de 14.349.002 caracteres: suficiente para el Base64 de un archivo de 10 MB con sus saltos de línea, así que todo lo que la herramienta codifica se puede volver a decodificar. Las entradas grandes se leen en segundo plano, para que escribir siga siendo fluido.

¿Puedo decodificar un JWT aquí?

Sí. Pegue el token y su encabezado y su carga útil se muestran como JSON con formato, con las fechas junto a los claims iat y exp y la firma como bytes. Esta página solo decodifica las tres partes base64url: no verifica la firma y nunca dice que un token sea válido, así que no la use para decidir si puede confiar en uno.

¿Le falta algo?Sugiera una función o una herramienta nueva