Este generador de contraseñas crea claves al azar con la longitud y los tipos de caracteres que elijas, o frases de contraseña con palabras en español, más fáciles de recordar y de escribir. Para cada una te muestra su entropía en bits y cuánto se tardaría en adivinarla probando combinaciones. Todo se calcula en tu navegador con su generador criptográfico: no se envía ni se guarda nada.
Usa una contraseña distinta en cada sitio y guárdalas en un gestor de contraseñas. Esta página no guarda las que genera: si la recargas, desaparecen. Activa también la verificación en dos pasos donde puedas.
Qué longitud elegir
- Al menos 15 caracteres si la contraseña es lo único que protege la cuenta: es el mínimo que exige la guía de autenticación del NIST de Estados Unidos (SP 800-63B, revisión 4, de julio de 2025). Con verificación en dos pasos, el mínimo baja a 8.
- Más larga es mejor que más rara. La misma guía prohíbe a los servicios exigir mezclas de tipos de caracteres y cambios periódicos de contraseña, y les pide aceptar al menos 64 caracteres, espacios y cualquier carácter Unicode, y permitir pegarla desde un gestor.
- Una frase de seis palabras al azar tiene 66 bits de entropía y es fácil de escribir en el móvil. Si la vas a memorizar, como la contraseña maestra del gestor, usa siete u ocho.
- Si un sitio limita la longitud o los símbolos, desmarca los símbolos y sube la longitud: 20 letras y cifras dan más de 115 bits.
Qué es la entropía de una contraseña
Es el logaritmo en base 2 del número de contraseñas que podría haber generado el mismo procedimiento: mide cuántas preguntas de «sí o no» haría falta acertar. Cada bit más duplica el trabajo de quien intenta adivinarla probando todas.
- Con caracteres: si cada uno sale al azar de un alfabeto de N caracteres, una contraseña de L caracteres tiene L × log2(N) bits. Con los 94 caracteres imprimibles (26 minúsculas, 26 mayúsculas, 10 cifras y 32 símbolos) y 20 de longitud, son unos 131 bits.
- Con la regla de «al menos uno de cada tipo»: el generador descarta las contraseñas a las que les falta algún tipo y vuelve a empezar, así que todas las válidas tienen la misma probabilidad. La entropía es la de esas válidas, que se cuentan con el principio de inclusión-exclusión: es un poco menor que la del cálculo simple.
- Con palabras: cada palabra sale de una lista de 2,048, así que aporta log2(2,048) = 11 bits. Quitar las tildes (la eñe se conserva) o poner mayúscula inicial no cambia la entropía: las palabras siguen siendo distintas.
- Sin sesgo: para elegir un carácter entre N, el generador toma un número al azar de 32 bits y descarta los del último tramo incompleto. Con el resto de la división a secas, los primeros caracteres saldrían un poco más que los demás.
El tiempo que muestra la herramienta es el promedio para acertarla a un billón de intentos por segundo, una cifra al alcance de un equipo con varias tarjetas gráficas contra contraseñas guardadas con un resumen rápido. Contra un servicio en línea, que limita los intentos, el tiempo es muchísimo mayor. La entropía solo vale si la contraseña se genera al azar: una que inventas tú, como Mexico2026!, tiene mucha menos de la que parece.
Generar contraseñas en Python
Con el módulo secrets, pensado para esto (random no sirve, porque su generador se puede predecir). La lista de palabras es el archivo spanish.txt, guardado como palabras-bip39-es.txt junto al programa:
import math, os, secrets, string
from itertools import combinations
GRUPOS = [string.ascii_lowercase, string.ascii_uppercase, string.digits, string.punctuation]
def contrasena(longitud=20, grupos=GRUPOS):
"""Al azar con secrets; si falta algún tipo, se descarta entera y se genera otra (así no hay sesgo)."""
alfabeto = "".join(grupos)
while True:
s = "".join(secrets.choice(alfabeto) for _ in range(longitud))
if all(any(c in g for c in s) for g in grupos):
return s
def entropia(longitud, grupos=GRUPOS):
"""log2 del número de contraseñas posibles con al menos un carácter de cada tipo (inclusión-exclusión)."""
total, k = 0, len(grupos)
for quitados in range(k + 1):
for combo in combinations(grupos, quitados):
total += (-1) ** quitados * (len("".join(grupos)) - len("".join(combo))) ** longitud
return math.log2(total)
def frase(palabras=6, separador="-"):
"""Palabras al azar de la lista BIP-39 en español: 2,048 palabras, 11 bits cada una."""
ruta = os.path.join(os.path.dirname(os.path.abspath(__file__)), "palabras-bip39-es.txt")
lista = open(ruta, encoding="utf-8").read().split()
return separador.join(secrets.choice(lista) for _ in range(palabras)), palabras * math.log2(len(lista))
print(contrasena(), f"{entropia(20):.1f} bits")
print(contrasena(16, [string.ascii_letters, string.digits]), f"{entropia(16, [string.ascii_letters, string.digits]):.1f} bits")
texto, bits = frase()
print(texto, f"{bits:.0f} bits")$ python3 contrasena.pyhW].RXz@<h/j7uI/>]hk 130.9 bits enlhL2xQy7t1N6RG 95.2 bits sutil-aprender-lomo-feria-viudo-jardín 66 bits
Otras herramientas para desarrolladores: el generador de UUID, el decodificador de JWT y el formateador de JSON. Todas, en decodigo.com/herramientas.
Longitud mínima, reglas de composición, cambios periódicos, caracteres admitidos y gestores de contraseñas: NIST SP 800-63B-4, apartado 3.1.1.2 («Password Verifiers»), versión final del 31 de julio de 2025 (DOI). Lista de palabras: la lista española de BIP-39, tal como la distribuye trezor/python-mnemonic con licencia MIT (Copyright © 2013-2016 Pavol Rusnak); sus 2,048 palabras siguen siendo distintas sin tildes. El generador se comprobó con un millón de elecciones al azar para cada tamaño de alfabeto y 150,000 palabras de frases (prueba de chi-cuadrado: uniformes en todos los casos), 100,000 contraseñas con los tipos elegidos y la entropía exacta contra el cálculo de Python en 870 combinaciones de tipos, longitud y caracteres ambiguos.