Generar una contraseña segura en línea: buenas prácticas 2026

Generar una contraseña segura en línea: buenas prácticas 2026

Longitud, entropía, símbolos: genera una contraseña robusta en el navegador con Web Crypto y conoce lo que la herramienta no garantiza.

01.10.2026
13 min de lectura
Compartir este artículo:
Contraseña
Seguridad
tools-dev
Tutorial

Una buena contraseña es larga, aleatoria y nunca se reutiliza

Una contraseña débil rara vez falla por falta de símbolos: falla porque la eligió una persona. El generador de contraseñas en línea de FastMinify saca cada carácter al azar con crypto.getRandomValues (Web Crypto) en tu navegador — nunca con Math.random — y los valores generados ni se envían ni se almacenan. Controla la longitud (8 a 128), cuatro conjuntos de caracteres, la exclusión de glifos ambiguos y una cantidad de hasta 50. No muestra indicador de fortaleza, no ofrece frase de contraseña y no recuerda nada. Esta guía explica por qué la longitud pesa más que la complejidad, qué cambia cada ajuste en bits, dónde se detiene la herramienta (sin garantía de «al menos un dígito») y cómo almacenar después una contraseña en el servidor con un hash lento en lugar de uno rápido — la herramienta bcrypt sirve para entender los parámetros con fixtures. La página está en el hub de utilidades para desarrolladores, junto al generador de UUID y al probador de regex, y también se llega a ella desde el hub de herramientas de seguridad.

Longitud de 8 a 128 caracteres, con deslizador o teclado; 16 por defecto
Cuatro conjuntos: a–z, A–Z, 0–9 y símbolos. Al menos uno debe seguir activo, o la herramienta muestra un error
Símbolos fijos: !@#$%^&*()-_=+[]{}|;:,.<>? — 26 caracteres, sin espacio, sin conjunto personalizado
«Excluir ambiguos» (activo por defecto) quita 0, O, o, I, l y 1 del conjunto de sorteo
Cantidad de 1 a 50: la lista numerada se regenera en cuanto cambia una opción, con copia de toda la lista o de una sola línea
Sorteo con Web Crypto descartando los valores que sesgarían la distribución. Sin crypto.getRandomValues, la herramienta muestra un error en lugar de un recurso débil

Dónde basta el generador local y dónde tomar el relevo

Usos adecuados

Una contraseña o un secreto de prueba que producir rápido, sin que el valor pase por un servidor.

Una contraseña de cuenta que guardar enseguida en un gestor de contraseñas: 16 caracteres, cuatro clases, ambiguos excluidos
Un secreto de fixture o de staging (base de datos de prueba, cuenta de demostración), hasta 50 de golpe
Una contraseña que dictar o copiar desde una pantalla: deja activo «Excluir ambiguos»
Un destino que rechaza algunos símbolos: desactiva «Símbolos» y sube a 20 caracteres o más
Un conjunto de valores para probar una política de validación (longitudes 8, 12, 64 y 128)
Lo que se hace en otro sitio

Generar es solo un eslabón: el almacenamiento en el servidor (la herramienta bcrypt), la detección de fugas (el escáner de secretos) y la autenticación de mensajes (la guía de hash y HMAC) tienen sus propias herramientas.

Conservar la contraseña: un gestor de contraseñas dedicado. La herramienta no guarda nada; recargar la página produce otra lista
Almacenar en el servidor: un hash lento y con sal (bcrypt, Argon2). La herramienta bcrypt (coste de 4 a 14, advertencia a 72 bytes) sirve para entender y producir fixtures, no para construir una autenticación
Comprobar que una contraseña no se ha subido ya a un commit: escanear el diff antes del commit y rotar de inmediato si el secreto ya está publicado
Firmar un webhook o autenticar un mensaje: un HMAC con una clave secreta, no una contraseña
Comprobar que una contraseña elegida por una persona no figura en una filtración conocida: fuera del alcance de la herramienta

Cuatro errores que debilitan una contraseña, incluso generada

Apilar reglas de complejidad sobre una contraseña corta

«Una mayúscula, un dígito, un símbolo» aplicado a ocho caracteres da sensación de seguridad sin fondo. Con el conjunto por defecto de la herramienta (82 caracteres posibles), 8 caracteres aleatorios valen unos 51 bits y 16 caracteres unos 102 bits. Una contraseña armada a mano como Primavera2026! cumple todas las reglas y, aun así, casi no contiene azar: un atacante prueba primero palabras del diccionario, años y sustituciones habituales. NIST SP 800-63B (revisión 4) apunta en la misma dirección: priorizar la longitud, aceptar contraseñas largas (al menos 64 caracteres) y no imponer reglas de composición ni cambios periódicos sin sospecha de compromiso.

Creer que un símbolo pegado a una palabra del diccionario la hace segura
Quedarse en 8 caracteres porque el formulario lo acepta
Cambiar la contraseña cada 90 días incrementando un dígito
Medir la fortaleza por el número de clases de caracteres y no por la parte de azar
Generar en una página que ve el valor

Un generador solo es seguro si el valor no sale del dispositivo. Aquí el sorteo ocurre en tu pestaña; un generador del lado del servidor, o una página cuyo editor registra lo que se muestra, vería el secreto. Esto no protege frente a una extensión maliciosa del navegador, un portapapeles sincronizado o una captura de pantalla. Un detalle propio de esta herramienta: el primerísimo renderizado de la página muestra una lista derivada de una semilla fija (para que el HTML del servidor y la hidratación coincidan), sustituida por un sorteo de Web Crypto en cuanto se ejecuta el script. Copia solo cuando la página haya cargado. Después, la lista permanece en memoria hasta recargar o pulsar «Borrar todo»: la herramienta no guarda historial.

Copiar un valor antes de que la página termine de cargar
Pegar una contraseña en un ticket, un chat o una captura de pantalla compartida
Dejar que un historial de portapapeles sincronizado conserve el secreto
Usar un generador del que no puedes comprobar dónde se hace el sorteo
Esperar una regla de composición que la herramienta no garantiza

La herramienta saca cada carácter de forma uniforme del conjunto activo; no fuerza «al menos un dígito, un símbolo». Con los ajustes por defecto (16 caracteres, 82 posibles, 8 de ellos dígitos), aproximadamente una contraseña de cada cinco no contiene ningún dígito, y solo cerca del 80 % de los sorteos contienen las cuatro clases. Si el formulario exige una clase, no la teclees a mano al final de la línea: recorre la lista (hasta 50 líneas) y toma una que la contenga. Elegir entre los sorteos conformes cuesta menos de un bit de entropía. El conjunto de símbolos es fijo (26 caracteres, sin espacio) y algunos sitios rechazan varios: desactiva entonces «Símbolos» y compénsalo con longitud.

Suponer que un sorteo siempre contiene una mayúscula, un dígito y un símbolo
Añadir «1!» a mano al final de una línea para pasar la validación
Mantener símbolos que el sitio de destino rechaza y dar vueltas al mensaje de error
Olvidar que algunos sistemas limitan la longitud
Confundir identificador, hash y contraseña

Un UUID v4 lleva 122 bits aleatorios, pero la especificación (RFC 9562) no lo presenta como secreto: consulta la guía de UUID, ULID y Nanoid. Un hash como SHA-256 es rápido por diseño, y por tanto poco adecuado para almacenar una contraseña — una tarjeta gráfica prueba miles de millones por segundo; la guía de hash y HMAC explica para qué sirve (integridad, firmas). Para almacenar una contraseña hace falta un hash lento y con sal (bcrypt, Argon2). La contraseña generada aquí es el secreto del usuario; lo que conserva el servidor es su hash lento. Ojo también con bcrypt: solo lee los primeros 72 bytes. El generador llega hasta 128 caracteres, pero pasados 72 caracteres ASCII el resto no entra en el hash — la herramienta bcrypt muestra una advertencia en ese caso.

Almacenar una contraseña con MD5 o SHA-256, incluso con sal
Tratar un UUID como secreto cuando la especificación no lo promete
Generar 100 caracteres creyendo que todos cuentan en bcrypt
Dejar una contraseña en claro en los logs o en un archivo .env versionado

Entropía: qué cambian en bits la longitud y los conjuntos de caracteres

La fórmula: longitud × log₂(tamaño del conjunto)

Para un sorteo uniforme e independiente — lo que hace la herramienta, y no lo que hace una contraseña elegida por una persona — la entropía se calcula directamente.

Fórmula: bits = longitud × log₂(tamaño del conjunto). Cada carácter añadido multiplica el espacio de búsqueda por el tamaño del conjunto.
Ajuste por defecto (a–z, A–Z, 0–9, símbolos, ambiguos excluidos): 24 + 24 + 8 + 26 = 82 caracteres, unos 6,36 bits por carácter. 8 caracteres ≈ 51 bits, 12 ≈ 76 bits, 16 ≈ 102 bits, 20 ≈ 127 bits.
Sin excluir los ambiguos: 88 caracteres, unos 6,46 bits cada uno — 16 caracteres ≈ 103 bits. Excluir los ambiguos cuesta, por tanto, solo unos 1,7 bits en 16 caracteres.
Solo letras y dígitos (ambiguos excluidos): 56 caracteres, unos 5,81 bits cada uno. 16 caracteres ≈ 93 bits; 18 caracteres ≈ 105 bits, ya por encima de 16 caracteres del conjunto completo.
Solo minúsculas (ambiguos excluidos): 24 caracteres, unos 4,58 bits — 16 caracteres ≈ 73 bits. Solo dígitos, exclusión desactivada: 10 caracteres, 12 dígitos ≈ 40 bits, es decir, un código o un fragmento de fixture, no una contraseña.
Cadena aleatoria almacenada o frase de contraseña memorizada

La herramienta solo produce cadenas de caracteres sacadas al azar. Para un secreto que tienes que recordar, la lógica es distinta.

La cadena aleatoria de la herramienta: imposible de recordar pasados unos pocos caracteres, así que va en un gestor de contraseñas. 16 caracteres ≈ 102 bits.
Frase de contraseña al estilo Diceware: cada palabra sacada de una lista de 7.776 palabras aporta unos 12,9 bits; 6 palabras ≈ 77 bits. Solo vale si las palabras se sacan al azar (dados o una herramienta), no si se eligen por su significado.
FastMinify no genera frases de contraseña: el campo de longitud cuenta caracteres, no palabras. Para la contraseña maestra de un gestor, sirve una frase sacada con dados; para todo lo demás, una cadena aleatoria almacenada.
Más allá de un centenar de bits, añadir bits cambia poco en la práctica: el eslabón débil pasa a ser el almacenamiento, la reutilización o el phishing.
Lo que el destino impone o limita

La longitud adecuada también depende de lo que el sistema receptor acepta y verifica de verdad.

NIST SP 800-63B (revisión 4): priorizar la longitud, aceptar al menos 64 caracteres, no imponer reglas de composición ni cambios periódicos; 15 caracteres como mínimo cuando la contraseña es el único factor de autenticación.
bcrypt: solo cuentan los primeros 72 bytes. Una contraseña ASCII de 100 caracteres se verifica solo sobre los primeros 72.
Algunos formularios limitan a 16, 20 o 32 caracteres o rechazan símbolos: ajusta la herramienta a lo que acepte el destino y recupera bits manteniendo las cuatro clases.
Una lista para fixtures puede ir de 8 a 128 caracteres: 8, 12, 64 y 128 cubren los límites habituales de una política de validación.

Generar, copiar, borrar: el recorrido por la herramienta

Ajustar, leer la lista, copiar

El generador de contraseñas no tiene botón «Generar»: la lista se rellena al cargar y se regenera con cada cambio de opción.

1

Elegir la longitud

Escribe un número de 8 a 128 o usa el deslizador; el valor por defecto es 16. Un valor fuera de límites se devuelve al intervalo.

2

Activar los conjuntos útiles

a–z, A–Z, 0–9 y Símbolos están activos por defecto. Si desactivas los cuatro, la herramienta muestra «Activa al menos un conjunto de caracteres.» y la lista queda vacía.

3

Obtener otra lista

Cambiar la cantidad en una unidad, alternar «Excluir ambiguos» o recargar la página produce un sorteo nuevo. No existe un botón de regenerar con los mismos ajustes.

4

Copiar una línea o toda la lista

Cada línea tiene su botón de copia; «Copiar todo» copia la lista, una contraseña por línea. «Borrar todo» vacía la lista hasta el próximo cambio de opción.

Lo que la herramienta no hace

Algunos límites que conviene conocer antes de fiarse de ella para un uso concreto.

Sin indicador de fortaleza ni de entropía: usa la fórmula de esta guía
Sin modo frase de contraseña, sin regla «al menos uno de cada clase»
Símbolos fijos (26): sin conjunto personalizado, sin caracteres acentuados
No se memoriza nada: sin historial, la lista desaparece al recargar
El botón de compartir envía la página de la herramienta, no las contraseñas mostradas

El mismo sorteo en tu propio código

Node: un sorteo uniforme con crypto.randomInt

El conjunto por defecto de la herramienta (82 caracteres, ambiguos excluidos) en pocas líneas. randomInt evita el sesgo del módulo.

Ejemplo básico

import { randomInt } from 'node:crypto' const ALPHABET = 'abcdefghijkmnpqrstuvwxyz' + // sin l, o 'ABCDEFGHJKLMNPQRSTUVWXYZ' + // sin I, O '23456789' + // sin 0, 1 '!@#$%^&*()-_=+[]{}|;:,.<>?' function password(length = 16) { let out = '' for (let i = 0; i < length; i++) { out += ALPHABET[randomInt(ALPHABET.length)] } return out } console.log(password(16)) // 16 caracteres de 82 console.log((16 * Math.log2(ALPHABET.length)).toFixed(1)) // 101.7 bits
Navegador: getRandomValues con descarte

Para sacar un índice sin sesgo, descarta los valores por encima del mayor múltiplo del tamaño del conjunto — es lo que hace la herramienta.

Ejemplo básico

function randomIndex(max) { // mayor múltiplo de max por debajo de 2^32 const limit = Math.floor(0x100000000 / max) * max const buf = new Uint32Array(1) do { crypto.getRandomValues(buf) } while (buf[0] >= limit) return buf[0] % max } // un simple buf[0] % max favorece ligeramente los primeros caracteres
Almacenar: un hash lento en el servidor

La contraseña generada sigue siendo el secreto del usuario; el servidor solo conserva un hash bcrypt. El coste de la herramienta va de 4 a 14 (10 por defecto).

Ejemplo básico

import bcrypt from 'bcryptjs' const hash = await bcrypt.hash(password, 12) // coste 12 const ok = await bcrypt.compare(candidate, hash) // true | false // bcrypt ignora todo lo que pase de 72 bytes
FastMinify password-generator

Sin instalación, sin enviar nada, cuatro clases, de 8 a 128 caracteres y hasta 50 líneas a la vez. Contrapartidas: sin indicador de fortaleza, sin frase de contraseña, sin garantía de «al menos uno de cada» y con símbolos fijos. Quédate con la página para una contraseña que guardar enseguida en un gestor o para fixtures. Para el almacenamiento en el servidor, usa bcrypt o Argon2 en tu propio código; para un valor que firmar, un HMAC con el generador de hash.

Conclusión

Una contraseña sólida es larga, sacada al azar por un generador fiable y usada una sola vez. El generador de contraseñas en línea produce ese sorteo en tu navegador con Web Crypto: 16 caracteres de las cuatro clases valen unos 102 bits, mucho más que una contraseña «compleja» de 10 caracteres escrita a mano. No le pidas lo que no promete: ni indicador de fortaleza, ni frase de contraseña, ni garantía de «al menos un dígito». Guarda el resultado en un gestor de contraseñas, aplícale bcrypt o Argon2 en el servidor y no confundas un UUID ni un hash rápido con una contraseña. Para lo siguiente, el hub de utilidades para desarrolladores reúne los demás generadores y el hub de herramientas de seguridad las herramientas de bcrypt, JWT y búsqueda de secretos.

Primero la longitud: al menos 16 caracteres para una cuenta, más si el destino lo acepta
Sin garantía por clase: si el formulario exige un dígito, toma otra línea de la lista
Copia solo cuando la página haya cargado, pega en un gestor de contraseñas y borra la lista
bcrypt solo lee 72 bytes: más allá, los caracteres adicionales no protegen nada
Almacenamiento en el servidor: hash lento y con sal (bcrypt, Argon2), nunca MD5 o SHA-256 a secas
Compartir este artículo
Compartir este artículo: