Generador de Base64 aleatorio

Crea cadenas Base64 aleatorias con el generador de números aleatorios seguro de tu navegador. Define la longitud en bytes o en caracteres, genera hasta 1000 a la vez y elige una salida estándar o segura para URL.

Se ejecuta por completo en tu navegador. No se sube nada.

Cómo se usa

  1. Indica la Longitud y elige en Unidad si cuenta Bytes de datos aleatorios o Caracteres Base64. Para una clave, usa bytes: 32 bytes equivalen a una clave de 256 bits.
  2. Indica en Cantidad cuántas cadenas necesitas y elige el Separador entre ellas: Salto de línea, Coma o Espacio.
  3. Elige la variante Estándar o Segura para URL. Con la unidad de bytes también puedes desactivar el Relleno si el sistema de destino no espera signos =.
  4. Haz clic en Generar para obtener valores nuevos y, después, en Copiar todo o Descargar para guardar la lista.

Bytes, caracteres y entropía

La seguridad de una cadena aleatoria se mide en bits de entropía. Cada byte aleatorio aporta 8 bits, así que 16 bytes dan 128 bits y 32 bytes, 256 bits. Base64 solo cambia la forma de escribir esos bytes: cada carácter lleva 6 bits y cada 3 bytes se convierten en 4 caracteres. La herramienta muestra la entropía de cada cadena para que puedas comprobarla de un vistazo.

Con la unidad de bytes, la salida se decodifica exactamente en ese número de bytes aleatorios, que es lo que necesitan las claves y los secretos. Con la unidad de caracteres, obtienes un número exacto de caracteres, cada uno elegido de manera uniforme entre los 64 del alfabeto; úsala cuando un sistema pida un token de longitud fija y lo guarde como texto.

BytesCaracteres Base64EntropíaUso habitual
121696 bitsNonce (IV) de AES-GCM
1624 (22 sin relleno)128 bitsSales, tokens de sesión y CSRF, claves AES-128
3244 (43 sin relleno)256 bitsClaves AES-256 y HMAC-SHA256, secretos HS256, claves de API
6488 (86 sin relleno)512 bitsClaves HMAC-SHA512, secretos HS512

Dónde se usan los valores Base64 aleatorios

  • Secretos JWT. RFC 7518 exige que la clave HMAC sea al menos tan larga como la salida del hash: 32 bytes para HS256, 48 para HS384 y 64 para HS512. Algunas bibliotecas usan la cadena del secreto tal cual y otras la decodifican antes desde Base64, así que comprueba qué espera la tuya. El decodificador JWT verifica firmas de HS256 a HS512 con cualquiera de los dos tipos de secreto, y el generador HMAC acepta la clave como texto, hexadecimal o Base64.
  • Claves de aplicación. Laravel, por ejemplo, guarda una clave de cifrado de 32 bytes en su archivo .env como APP_KEY=base64:..., el mismo formato que una cadena de 32 bytes generada con esta herramienta.
  • Secrets de Kubernetes. Los valores dentro de data deben ser Base64 estándar con relleno. Una cadena generada en modo bytes, con la variante Estándar y el relleno activado, puede ir ahí directamente, y el Pod recibe los bytes aleatorios sin procesar. Si la aplicación espera el propio texto Base64, colócalo en stringData.
  • Tokens en URL. Los enlaces para restablecer contraseñas, los códigos de invitación y otros tokens que viajan en URL deben usar la variante segura para URL, que sustituye + y / por - y _. Consulta Base64URL para más detalles.

Por qué crypto.getRandomValues y no Math.random

Math.random() es un generador rápido de uso general. Su salida no está pensada para ser impredecible y, en algunos motores, el estado interno se puede reconstruir a partir de unos pocos valores. Esta herramienta usa crypto.getRandomValues(), un generador criptográficamente seguro que obtiene su semilla del sistema operativo, el mismo tipo de fuente que hay detrás de openssl rand y del módulo secrets de Python. Los valores se crean en tu dispositivo y nunca se envían ni se almacenan.

Generar Base64 aleatorio en código

# Shell: 32 bytes aleatorios en Base64 (44 caracteres)
openssl rand -base64 32
head -c 32 /dev/urandom | base64

# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32)        # seguro para URL, sin relleno, 43 caracteres

// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url');   // seguro para URL, sin relleno

// Navegador
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));

Preguntas frecuentes

¿Qué longitud debe tener una clave o un secreto aleatorio?

16 bytes (128 bits) bastan para valores que solo necesitan ser únicos e imposibles de adivinar, como los ID de sesión, los tokens CSRF y las sales. Usa 32 bytes (256 bits) para claves AES-256, claves HMAC-SHA256 y secretos HS256, y 64 bytes para HMAC-SHA512 y HS512.

¿Es lo mismo que openssl rand -base64 32?
Produce el mismo tipo de valor. Con una longitud de 32 bytes, la variante Estándar y el relleno activado, cada resultado tiene 44 caracteres, termina en un = y se decodifica en 32 bytes aleatorios. Los valores en sí, por supuesto, son distintos cada vez.
¿Debo usar la unidad de bytes o la de caracteres?

Usa bytes cuando la cadena se vaya a decodificar, como ocurre con las claves de cifrado y los Secrets de Kubernetes. Usa caracteres cuando un sistema necesite un token de longitud exacta y use el texto tal cual. Solo está garantizado que una cadena generada con la unidad de caracteres se decodifique sin errores si su longitud es múltiplo de 4.

¿Cuándo necesito la variante segura para URL?
Siempre que el valor vaya en una URL, una cadena de consulta, una cookie o un nombre de archivo. En Base64 estándar, / divide las rutas de las URL y + se convierte en un espacio en las cadenas de consulta con codificación de formulario. El Base64 seguro para URL usa - y _ en su lugar y suele escribirse sin relleno.
¿Los valores generados se guardan o se envían a algún sitio?

No. Se generan con JavaScript en tu navegador, nunca se transmiten y desaparecen al salir de la página. En cuanto uses uno como secreto real, guárdalo en un gestor de contraseñas o en un almacén de secretos, no en mensajes de chat ni en tickets.