Cómo codificar texto a Base64
- Escribe o pega tu texto en el cuadro Entrada · texto. La página se abre con un ejemplo; pulsa Borrar para empezar en blanco.
- El Base64 aparece en Salida · Base64 mientras escribes. Con entradas muy grandes puedes desmarcar En vivo y pulsar Ejecutar.
- Ajusta las opciones que espera el sistema receptor: URL-safe (- _), Sin relleno (=), Ajuste de línea y Juego de caracteres. Los valores por defecto (alfabeto estándar, con relleno, una sola línea, UTF-8) sirven para la mayoría de las API.
- Pulsa Copiar salida, o Descargar para guardar el resultado como
base64.txt. - Para comprobar la ida y vuelta, pulsa Intercambiar. Mueve el Base64 a la entrada y cambia la herramienta a decodificar.
Debajo de los botones ves el tamaño de la entrada en bytes, el de la salida y el cambio porcentual, algo útil cuando un campo tiene un límite de longitud.
Cómo funciona la codificación Base64
Base64 trabaja con bytes, así que el primer paso es convertir el texto en bytes con un juego de caracteres (aquí UTF-8, salvo que elijas otro). Después el codificador toma los bytes de tres en tres, es decir, 24 bits, los divide en cuatro números de 6 bits y escribe cada número como un carácter de un alfabeto de 64: A–Z, a–z, 0–9, + y /.
El ejemplo clásico es el texto Man: los bytes 4D 61 6E se convierten en TWFu. Cuando el último grupo tiene solo uno o dos bytes, la salida se completa con =: Ma da TWE= y M da TQ==. El recorrido completo está en cómo funciona Base64, y el relleno explicado cuenta cuándo se puede omitir el =.
Para n bytes, la salida mide siempre 4 × ⌈n / 3⌉ caracteres, alrededor de un 33 % más que la entrada. La calculadora de tamaño Base64 hace esa cuenta para cualquier tamaño, y la sobrecarga de tamaño de Base64 explica cuándo importa. Cualquiera puede revertir Base64, así que no oculta nada; lee codificación frente a cifrado antes de guardar secretos en él.
Opciones de codificación
| Opción | Qué cambia | Cuándo usarla |
|---|---|---|
| URL-safe (- _) | + pasa a ser - y / pasa a ser _ (RFC 4648, sección 5) | URL, query strings, nombres de archivo, cookies, JWT. El codificador Base64URL la trae activada por defecto |
| Sin relleno (=) | Elimina los = finales | JWT y la mayoría de los formatos URL-safe; cualquier cosa que quite el = de todos modos |
| Ajuste de línea: 76 (MIME, LF o CRLF) | Inserta un salto de línea cada 76 caracteres | Cuerpos y adjuntos de correo (codificador MIME) |
| Ajuste de línea: 64 (PEM) | Inserta un salto de línea cada 64 caracteres | Certificados y claves entre las líneas -----BEGIN y -----END |
| Juego de caracteres | En qué bytes se convierte cada carácter antes de codificar | UTF-8, salvo que el receptor espere UTF-16, Windows-1251, Shift_JIS u otra codificación heredada |
Ejemplos con Unicode, emoji y salida URL-safe
Todos los valores de abajo se generaron con el módulo base64 de Python y coinciden con lo que produce esta herramienta.
| Entrada | Ajustes | Base64 |
|---|---|---|
Hello | UTF-8 | SGVsbG8= |
Hello, world! | UTF-8 | SGVsbG8sIHdvcmxkIQ== |
café | UTF-8 | Y2Fmw6k= |
café | ISO-8859-1 | Y2Fm6Q== |
€ | UTF-8 | 4oKs |
€ | Windows-1252 | gA== |
👋 | UTF-8 | 8J+Riw== |
👋 | UTF-8, URL-safe, sin relleno | 8J-Riw |
Привет | UTF-8 | 0J/RgNC40LLQtdGC |
Привет | Windows-1251 | z/Do4uXy |
La misma palabra da un Base64 distinto en cada juego de caracteres porque los bytes son distintos: é ocupa dos bytes (C3 A9) en UTF-8 y uno (E9) en Latin-1. El emoji de la mano que saluda son cuatro bytes UTF-8, así que por sí solo ocupa 8 caracteres, dos de ellos de relleno.
Juegos de caracteres y caracteres que no caben
UTF-8 puede representar cualquier carácter Unicode, así que nunca pierde nada. Los otros 26 juegos de la lista (UTF-16LE/BE, UTF-32LE, ASCII, las páginas de códigos ISO-8859 y Windows, KOI8-R/U, CP866, Shift_JIS, EUC-JP, GBK, Big5 y EUC-KR) existen para los sistemas que los esperan. Si tu texto contiene un carácter que el juego elegido no tiene, se sustituye por ? y un aviso indica cuántos caracteres se reemplazaron. Por ejemplo, € en ISO-8859-1 se codifica como Pw==, que no es más que un signo de interrogación.
Elige UTF-16LE para cadenas de Windows y .NET y para PowerShell; la página UTF-16 a Base64 explica por qué. Elige ASCII cuando un sistema deba rechazar todo lo que no sea texto de 7 bits (ASCII a Base64).
Ajuste de línea
El Base64 normal es una única línea larga, que es lo que necesitan JSON, las cabeceras HTTP, las URL y las variables de entorno. El correo usa líneas de 76 caracteres (RFC 2045) y los archivos PEM, de 64. La opción de ajuste inserta saltos de línea \n a ese ancho, o CRLF con 76 (MIME, CRLF). Los decodificadores, incluido el decodificador de este sitio, ignoran los saltos de línea, así que la salida ajustada se decodifica en los mismos bytes. Base64 en el correo electrónico cubre las reglas de MIME.
Errores habituales al codificar
- Se cuela un salto de línea final.
echo Hello | base64imprimeSGVsbG8Kporqueechoañade\n. El textoHellosolo esSGVsbG8=. Usaprintf '%s'y, al pegar aquí, comprueba que el número de bytes de entrada es el que esperas. btoa()falla con Unicode. En los navegadores,btoa("Grüße 👋")lanzaInvalidCharacterError, porquebtoasolo acepta caracteres Latin-1. Codifica primero a bytes UTF-8, como en el fragmento de abajo.- El receptor usa otro juego de caracteres. Si codificas en UTF-8 y el otro lado decodifica como Latin-1,
cafésale comocafé. Acuerda el juego de caracteres con el otro lado o elige aquí el del receptor. - Codificar dos veces. El Base64 de
SGVsbG8=esU0dWc2JHOD0=. Si un valor se decodifica en más Base64, algo en la cadena de procesamiento lo codificó una segunda vez. +y/rompen las URL. En una query string,+se interpreta como un espacio. Usa la opción URL-safe o el codificador Base64URL, o aplica codificación porcentual al valor.
Codificar Base64 en JavaScript, Python y la línea de comandos
En JavaScript del navegador, convierte la cadena a bytes UTF-8 con TextEncoder y luego codifica los bytes. Los navegadores recientes pueden llamar directamente a bytes.toBase64() (Uint8Array.toBase64).
const bytes = new TextEncoder().encode("Grüße 👋");
let bin = "";
for (const b of bytes) bin += String.fromCharCode(b);
btoa(bin); // "R3LDvMOfZSDwn5GL"
// Node.js
Buffer.from("Grüße 👋", "utf8").toString("base64"); // "R3LDvMOfZSDwn5GL"
Buffer.from("👋", "utf8").toString("base64url"); // "8J-Riw"
En Python, b64encode recibe bytes y devuelve bytes:
import base64
base64.b64encode("Grüße 👋".encode("utf-8")).decode("ascii")
# 'R3LDvMOfZSDwn5GL'
base64.urlsafe_b64encode("👋".encode()).rstrip(b"=").decode()
# '8J-Riw'
En Linux y macOS, el comando base64 codifica la entrada estándar:
printf '%s' 'Grüße 👋' | base64
base64 -w 0 file.bin > file.b64
El primer comando imprime R3LDvMOfZSDwn5GL. El base64 de GNU en Linux ajusta la salida a 76 columnas por defecto y -w 0 lo desactiva; la versión de macOS no ajusta salvo que se lo pidas. Más lenguajes y casos límite: Base64 en JavaScript, Node.js, Python y PHP.
Imágenes, PDF y cualquier otro archivo pasan por el codificador de archivos, con salida como data URI y JSON.
Preguntas frecuentes
¿Cómo codifico una cadena en Base64?
Pega la cadena en el cuadro de entrada de arriba y copia el resultado del cuadro de salida. En código, convierte la cadena a bytes UTF-8 y codifica esos bytes: base64.b64encode(s.encode()) en Python, Buffer.from(s).toString("base64") en Node.js.
¿Por qué mi Base64 termina en = o ==?
Base64 trabaja en bloques de 3 bytes. Cuando la longitud de la entrada no es múltiplo de 3, el último bloque queda incompleto y = marca los bytes que faltan: un = si sobran 2 bytes, == si sobra 1. Los detalles están en el relleno explicado.
¿Por qué obtengo otro Base64 para el mismo texto en otra herramienta?
Casi siempre hay una diferencia oculta en los bytes: un salto de línea final (echo añade uno), otro juego de caracteres (UTF-8, Latin-1 o UTF-16) o la normalización Unicode. Compara el número de bytes de entrada que muestra la herramienta.
¿Sirve la codificación Base64 para ocultar contraseñas?
No. Base64 no tiene clave y cualquiera lo decodifica en un segundo. Úsalo para transportar datos y recurre a cifrado o hashing de verdad para protegerlos. Consulta codificación frente a cifrado.
¿Cuánto crece un texto al codificarlo en Base64?
Cada 3 bytes se convierten en 4 caracteres, así que la salida es aproximadamente un 33 % más grande, más los saltos de línea si la ajustas. 100 bytes de UTF-8 se convierten en 136 caracteres.