Generador de Contraseñas

Genera contraseñas aleatorias y seguras con longitud y conjuntos de caracteres personalizables

Longitud20
Cantidad5

¿Qué es un generador de contraseñas?

Un generador de contraseñas crea cadenas de caracteres aleatorias usadas como contraseñas para cuentas de usuario, API keys, credenciales de base de datos y secretos de cifrado. A diferencia de las contraseñas elegidas por personas, las contraseñas generadas toman del espacio completo de combinaciones de caracteres posibles, lo que las hace resistentes a ataques de diccionario y adivinanzas basadas en patrones. Esta herramienta genera contraseñas aleatorias y seguras en línea usando el generador de números aleatorios criptográfico integrado en tu navegador.

La fortaleza de una contraseña depende de dos factores: longitud y diversidad de caracteres. Una contraseña de 20 caracteres que usa mayúsculas, minúsculas, dígitos y símbolos tiene aproximadamente 131 bits de entropía. A ese nivel, un ataque de fuerza bruta que pruebe un billón de intentos por segundo necesitaría más tiempo que la edad del universo para probar cada combinación. La matemática es directa: entropía = longitud x log2(tamaño del conjunto de caracteres).

Estándares como NIST SP 800-63B recomiendan contraseñas de al menos 8 caracteres sin límite superior impuesto por el verificador, y desaconsejan reglas de composición forzadas como exigir exactamente un símbolo, favoreciendo en cambio frases más largas. Para credenciales máquina-a-máquina y cuentas de servicio, 20 o más caracteres aleatorios tomados de un conjunto completo de caracteres es la línea base aceptada en la mayoría de marcos de seguridad y regímenes de cumplimiento.

¿Por qué usar un generador de contraseñas?

Las personas somos malos generadores de números aleatorios. Reutilizamos contraseñas, elegimos palabras del diccionario, sustituimos letras con patrones predecibles (@ por a, 3 por e) y recurrimos a cadenas cortas. Un generador de contraseñas elimina el sesgo humano del proceso.

🔐
Generación con privacidad primero
Las contraseñas se generan completamente en tu navegador usando la Web Crypto API. Ningún carácter sale de tu dispositivo, no se registra nada y no se realizan solicitudes de red durante la generación.
Salida en lote al instante
Genera hasta 20 contraseñas de una vez con un solo clic. Copia contraseñas individuales o todas a la vez para scripts de aprovisionamiento o bóvedas de credenciales.
🛡️
Sin cuenta necesaria
Sin registro, sin correo electrónico, sin cookies que rastreen tus contraseñas generadas. Abre la página, configura tus opciones y genera.
🎛️
Control total del conjunto de caracteres
Activa o desactiva mayúsculas, minúsculas, dígitos y símbolos de forma independiente. Establece la longitud de 4 a 128 caracteres para ajustarte a los requisitos de cualquier sistema o política.

Casos de uso del generador de contraseñas

Desarrollo frontend
Genera contraseñas de prueba para validación de formularios, pruebas de longitud de entrada y desarrollo de flujos de autenticación. Verifica que tus formularios de inicio de sesión gestionen correctamente contraseñas de 128 caracteres y caracteres especiales.
Backend y DevOps
Crea credenciales de base de datos, tokens de API y contraseñas de cuentas de servicio durante la configuración de infraestructura. Usa la generación en lote para aprovisionar múltiples servicios en una sola sesión.
Ingeniería de seguridad
Genera secretos de alta entropía para claves de cifrado, firma HMAC y rotación de secretos JWT. Establece una longitud de 64 o más caracteres para secretos que necesiten superar los 256 bits de entropía.
QA y pruebas de penetración
Prueba la aplicación de políticas de contraseñas generando cadenas que incluyan o excluyan conjuntos de caracteres específicos. Verifica que los sistemas rechacen correctamente contraseñas por debajo de la longitud o complejidad mínima.
Ingeniería de datos
Genera credenciales aleatorias para entornos de prueba, bases de datos de staging y secretos de pipelines CI/CD. Evita reutilizar contraseñas de producción en datos de prueba generando nuevas por cada entorno.
Seguridad de cuentas personales
Crea contraseñas únicas para cada cuenta en línea. Combina este generador con un gestor de contraseñas para almacenar credenciales que no necesitas memorizar.

Referencia de entropía de contraseñas

La entropía mide qué tan impredecible es una contraseña. Se calcula como log2(tamaño_conjunto ^ longitud). Mayor entropía significa más combinaciones posibles que un atacante debe recorrer. NIST y OWASP recomiendan al menos 80 bits de entropía para aplicaciones de alta seguridad.

LongitudConjunto de caracteresEntropíaTiempo de fuerza bruta
8lower + digits~41 bitsMinutes to hours
12lower + upper + digits~71 bitsCenturies (offline)
16all character sets~105 bitsBeyond brute-force
20all character sets~131 bitsBeyond brute-force
32all character sets~210 bitsBeyond brute-force
64all character sets~419 bitsBeyond brute-force

Los tiempos de descifrado asumen 1 billón de intentos por segundo (ataque offline con GPUs modernas). Los ataques en línea con limitación de velocidad son órdenes de magnitud más lentos.

CSPRNG vs Math.random() para generar contraseñas

La fuente de aleatoriedad importa tanto como la longitud de la contraseña. Una contraseña generada con un generador de números aleatorios predecible puede ser reconstruida por un atacante que conozca el algoritmo y el estado de la semilla. Esta herramienta usa crypto.getRandomValues(), que es un generador de números pseudoaleatorios criptográficamente seguro (CSPRNG) incorporado en todos los navegadores modernos.

crypto.getRandomValues()
Usa fuentes de entropía del sistema operativo (RNG de hardware, tiempos de interrupción, etc.). La salida es impredecible incluso si un atacante conoce todas las salidas anteriores. Requerido por la especificación W3C Web Crypto para operaciones sensibles a la seguridad.
Math.random()
Usa un algoritmo determinista sembrado desde un conjunto de entropía limitada. La salida puede predecirse si se conoce el estado de la semilla. La especificación ECMAScript establece explícitamente que Math.random() no proporciona números aleatorios criptográficamente seguros. Nunca lo uses para generar contraseñas.

Ejemplos de código

Genera contraseñas de forma programática en diferentes lenguajes. Cada ejemplo a continuación usa una fuente aleatoria criptográficamente segura, no Math.random() ni PRNGs débiles equivalentes.

JavaScript (Web Crypto API)
// Generate a random password in the browser or Node.js 19+
function generatePassword(length = 20) {
  const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  const values = new Uint32Array(length)
  crypto.getRandomValues(values)
  return Array.from(values, v => charset[v % charset.length]).join('')
}

console.log(generatePassword())    // → "kR7!mZp$Xw2&nLq9@Yf3"
console.log(generatePassword(32))  // → "Hd4%tNx!Qw8#mKp2Rv6&Zj0*Ls3Yb7@"
Python
import secrets
import string

def generate_password(length: int = 20) -> str:
    """Generate a cryptographically secure random password."""
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

# Single password
print(generate_password())      # → "kR7!mZp$Xw2&nLq9@Yf3"

# Batch of 5 passwords
for _ in range(5):
    print(generate_password(24))

# Ensure at least one char from each category
def generate_strong(length: int = 20) -> str:
    required = [
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation),
    ]
    remaining = length - len(required)
    alphabet = string.ascii_letters + string.digits + string.punctuation
    all_chars = required + [secrets.choice(alphabet) for _ in range(remaining)]
    secrets.SystemRandom().shuffle(all_chars)
    return ''.join(all_chars)
CLI (OpenSSL / /dev/urandom)
# OpenSSL — generate 32 random bytes, base64-encode
openssl rand -base64 32
# → "x7Kp2mNqR4wZ8vLs1Yb0Hd6tFj3Xc9Ga5eUi+Wo="

# /dev/urandom with tr — alphanumeric + symbols, 20 chars
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 20; echo
# → "kR7!mZp$Xw2&nLq9@Yf3"

# pwgen (install: apt install pwgen / brew install pwgen)
pwgen -sy 20 5
# Generates 5 passwords, 20 chars each, with symbols
Go
package main

import (
    "crypto/rand"
    "fmt"
    "math/big"
)

func generatePassword(length int) (string, error) {
    charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
    result := make([]byte, length)
    for i := range result {
        idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
        if err != nil {
            return "", err
        }
        result[i] = charset[idx.Int64()]
    }
    return string(result), nil
}

func main() {
    pwd, _ := generatePassword(20)
    fmt.Println(pwd) // → "kR7!mZp$Xw2&nLq9@Yf3"
}

Preguntas frecuentes

¿Qué longitud debe tener una contraseña?
Para cuentas de usuario, 16 caracteres de un conjunto mixto proporcionan más de 100 bits de entropía, suficiente para todos los modelos de amenaza actuales. Para secretos de máquinas (API keys, claves de cifrado), usa 32 caracteres o más. NIST SP 800-63B establece un mínimo de 8 caracteres pero recomienda que los sistemas permitan contraseñas mucho más largas sin truncarlas.
¿Es seguro usar este generador de contraseñas?
Sí. Las contraseñas se generan en tu navegador usando la Web Crypto API (crypto.getRandomValues). No se envía ningún dato a ningún servidor. Puedes verificarlo abriendo la pestaña de red de tu navegador y comprobando que no se realizan solicitudes al hacer clic en Generar. El código fuente es JavaScript del lado del cliente, visible en las herramientas de desarrollo de tu navegador.
¿Qué es la entropía de una contraseña?
La entropía es una medida de aleatoriedad expresada en bits. Una contraseña con N bits de entropía tiene 2^N valores posibles. Por ejemplo, una contraseña de 20 caracteres tomada de 95 caracteres ASCII imprimibles tiene log2(95^20) = 131,1 bits de entropía. Cada bit adicional duplica el número de intentos que necesita un atacante.
¿Debo incluir símbolos en mis contraseñas?
Incluir símbolos aumenta el conjunto de caracteres de 62 (letras + dígitos) a 95 (ASCII imprimible), lo que añade aproximadamente 6,1 bits de entropía por carácter. Algunos sistemas restringen qué símbolos se permiten. Si un sistema rechaza ciertos símbolos, desactiva la opción de símbolos y compensa con una contraseña más larga. Una contraseña alfanumérica de 24 caracteres tiene más entropía que una de 16 caracteres con símbolos.
¿Por qué no usar Math.random() para generar contraseñas?
Math.random() no es criptográficamente seguro. La mayoría de los motores JavaScript lo implementan con xorshift128+ o un PRNG rápido similar diseñado para simulación y juegos, no para seguridad. Un atacante que observe algunas salidas puede recuperar el estado interno y predecir todas las salidas futuras. La Web Crypto API usa fuentes de entropía del sistema operativo que no son predecibles.
¿Puedo usar contraseñas generadas como API keys y tokens?
Sí, pero considera los requisitos de formato de tu sistema destino. Algunas APIs esperan claves codificadas en base64 o cadenas hexadecimales en lugar de caracteres arbitrarios. Para generación de secretos en bruto, usa el conjunto completo de caracteres con 32 o más caracteres. Para claves en base64, genera bytes aleatorios y codifícalos por separado en lugar de tratar base64 como un conjunto de caracteres para contraseñas.
¿Con qué frecuencia debo rotar las contraseñas?
NIST SP 800-63B (2017, actualizado en 2024) desaconseja la rotación periódica forzada para contraseñas de usuario porque conduce a elecciones de contraseñas más débiles. Rota solo cuando haya evidencia de compromiso. Para secretos de máquinas y cuentas de servicio, rota según el modelo de riesgo de tu organización, típicamente cada 90 días para credenciales de alto privilegio.