Esta herramienta genera material de clave aleatorio criptográficamente seguro. A diferencia de los generadores existentes de cadenas y contraseñas (que usan Math.random() y no sirven para secretos), esta herramienta está guiada por entropía y respaldada por CSPRNG.
Entrada guiada por entropía. Especificas una entropía objetivo en bits (por defecto 256, paso 8) — la seguridad que quieres — y la herramienta deriva el número de bytes (bytes = ceil(bits/8)) por ti. Este es el modelo mental correcto para claves: un secreto JWT HS256 necesita 256 bits de entropía sin importar cuántos caracteres lo representen. No pienses "cuántos caracteres", piensa "cuánta seguridad".
Dos ramas de salida:
Codificación de bytes (por defecto — deja Alfabeto Personalizado vacío). Genera ceil(entropyBits/8) bytes aleatorios con crypto.randomBytes() y renderiza el mismo material en tres codificaciones lado a lado — hex, base64, base64url — para que copies la que tu consumidor espere. Cada byte aporta 8 bits de entropía, así que la entropía entregada siempre es la solicitada.
Alfabeto personalizado (rellena Alfabeto Personalizado). Muestrea crypto.randomInt(tamañoAlfabeto) por carácter — muestreo por rechazo interno de Node, sin sesgo de módulo, sin bucle de rechazo manual. La entropía real es longitud × log₂(tamañoAlfabeto), que puede ser menor de lo solicitado (p. ej. alfabeto de 32 símbolos × 10 caracteres = 50 bits, no 256); la herramienta te avisa en rojo cuando ocurre, porque una cadena corta con alfabeto personalizado puede ser mucho más débil de lo que parece.
¿Por qué tres codificaciones lado a lado? Una clave de 256 bits son 64 caracteres hex, ~44 base64, o 43 base64url. Distintos sistemas esperan distintos formatos; mostrar los tres te deja elegir correctamente sin volver a ejecutar.
Casos de uso: claves AES-256, claves HMAC, secretos de firma JWT, API keys, secretos de sesión, cualquier valor que un atacante no deba poder adivinar. crypto.randomBytes() y crypto.randomInt() toman del CSPRNG del SO — nunca Math.random().