🔐

FAQ de Codificador / Decodificador Base64

Q: ¿Qué es la codificación Base64 y para qué se utiliza?

A: Base64 es un esquema de codificación de binario a texto que convierte datos binarios en un formato de cadena ASCII utilizando 64 caracteres (A-Z, a-z, 0-9, +, /). Se utiliza principalmente para transmitir datos binarios a través de protocolos basados en texto como HTTP, SMTP o en cargas útiles JSON. Las aplicaciones comunes incluyen archivos adjuntos de correo electrónico mediante MIME, la inserción de imágenes en HTML y CSS como data URLs, la codificación de cargas útiles en JSON Web Tokens (JWT) y el almacenamiento de datos binarios en columnas de bases de datos basadas en texto.

Q: ¿Base64 es cifrado? ¿Es seguro?

A: No. Base64 es un esquema de codificación, no cifrado. Cualquiera que tenga una cadena codificada en Base64 puede decodificarla de vuelta a los datos originales al instante sin necesidad de ninguna clave, contraseña o secreto. No proporciona confidencialidad, integridad ni autenticación. Piénsalo como una forma de representar los mismos datos en un formato diferente — como traducir inglés a código Morse. Si necesitas proteger datos sensibles, utiliza primero un algoritmo de cifrado adecuado (como AES) y, opcionalmente, codifica después los bytes cifrados con Base64 para su transporte.

Q: ¿Por qué Base64 a veces termina con signos = o ==?

A: El carácter = es el relleno. Base64 procesa los datos de entrada en grupos de 3 bytes (24 bits), produciendo 4 caracteres Base64 por grupo. Cuando la longitud de la entrada no es un múltiplo de 3 bytes, la codificación añade caracteres de relleno = para que la salida sea un múltiplo de 4 caracteres. Se añade un = cuando quedan 2 bytes, y dos caracteres = cuando solo queda 1 byte. Por ejemplo, "Man" (3 bytes) se codifica como "TWFu" sin relleno, pero "Ma" (2 bytes) se codifica como "TWE=" y "M" (1 byte) se codifica como "TQ==".

Q: ¿Base64 hace que los datos sean más grandes? ¿Cuánta sobrecarga añade?

A: Sí, la codificación Base64 aumenta el tamaño de los datos aproximadamente un 33%. Por cada 3 bytes de entrada binaria, la salida es de 4 bytes, más el relleno opcional. Así, un archivo binario de 3 MB se convierte en aproximadamente 4 MB cuando se codifica en Base64. Este es el coste de poder transmitir datos binarios a través de canales de solo texto. En comparación con otras codificaciones de binario a texto, Base64 es relativamente eficiente — la codificación hexadecimal, por ejemplo, añade una sobrecarga del 100%.

Q: ¿Cuál es la diferencia entre Base64 estándar y Base64url?

A: Base64 estándar utiliza + y / en su alfabeto y = para el relleno. Base64url (Base64 seguro para URLs) reemplaza + por - y / por _, y normalmente omite el relleno. Esto hace que Base64url sea seguro para su uso en URLs, parámetros de consulta y nombres de archivo sin necesidad de codificación de porcentaje adicional. Base64url está definido en el RFC 4648 y se utiliza ampliamente en JSON Web Tokens (JWT), tokens OAuth y APIs web. Por ejemplo, una cadena Base64 estándar como Pj4+Pz8/Pw== se convierte en Pj4-Pz8_Pw en Base64url.

Q: ¿Qué es una data URL Base64 y cómo se utiliza en HTML y CSS?

A: Una data URL es un esquema de URI que inserta datos directamente en un documento web. Para imágenes, el formato es data:image/png;base64,iVBORw0KGgo.... Puede utilizarse en lugar de una URL de archivo en etiquetas <img> de HTML y en propiedades background-image de CSS. Las data URLs eliminan la necesidad de una solicitud HTTP separada para cargar la imagen, lo que puede mejorar el rendimiento de los recursos pequeños (normalmente por debajo de 10 KB). Sin embargo, aumentan el tamaño del archivo HTML/CSS aproximadamente un 33% e impiden que el navegador almacene en caché la imagen de forma independiente.

Q: ¿Puedes convertir cualquier archivo a Base64?

A: Sí — cualquier dato binario, ya sea texto, una imagen, audio, vídeo, un PDF o un archivo comprimido, puede codificarse en Base64. El proceso es el mismo: lee los bytes en bruto del archivo y aplica el algoritmo de codificación Base64. Cuando decodificas la cadena Base64, obtienes exactamente los bytes originales. Así funcionan los archivos adjuntos de correo electrónico: el archivo binario se codifica en Base64 antes de enviarse a través de SMTP y se decodifica de vuelta al archivo original en el extremo receptor.

Q: ¿Cómo manejo caracteres Unicode (como emoji o texto chino) al codificar Base64 en JavaScript?

A: La función incorporada btoa() solo funciona con caracteres Latin-1 (caracteres de un solo byte). Para cadenas Unicode que contienen emoji, caracteres chinos u otros caracteres multibyte, necesitas convertir primero a bytes utilizando la API TextEncoder:

function unicodeToBase64(str) {
  const bytes = new TextEncoder().encode(str);
  const binaryString = String.fromCharCode(...bytes);
  return btoa(binaryString);
}

function base64ToUnicode(base64) {
  const binaryString = atob(base64);
  const bytes = Uint8Array.from(binaryString, c => c.charCodeAt(0));
  return new TextDecoder().decode(bytes);
}

En Node.js, la clase Buffer maneja Unicode de forma nativa: Buffer.from('Hello 你好 🚀').toString('base64') funciona sin ningún tratamiento especial.

FAQ de Codificador / Decodificador Base64 - CoolTool