Herramienta de Generación y Validación de Contraseñas
Herramienta profesional de generación y validación de contraseñas que crea contraseñas seguras y frases de contraseña memorables, con soporte para generación por lotes, garantía de unicidad, evaluación de fortaleza y validación de políticas. Cuenta con fuente aleatoria criptográficamente segura, conjuntos de caracteres configurables, filtrado de caracteres similares, estadísticas de deduplicación por lotes y funcionalidad de copia con un clic. Incluye ejemplos de código en varios idiomas, base de conocimientos de contraseñas, mejores prácticas de seguridad y herramientas de prueba de políticas. Todas las operaciones se realizan localmente en tu navegador, garantizando privacidad y seguridad.
Generador de Contraseñas
-
#
Probador de Política de Contraseñas
- Longitud
- Minúsculas
- Mayúsculas
- Dígitos
- Símbolos
- Secuencial
- Repeticiones
- Lista bloqueada
Generador de Frases de Contraseña
Hoja de referencia rápida de hashing de contraseñas
- Usa Argon2id con parámetros razonables que requieran mucha memoria
- Tiempo ≥ 2 pasadas, memoria ≥ 64MB (ajusta según el entorno)
- Guarda una sal única por usuario; opcionalmente usa una pepper en la capa de aplicación
- Elige SHA-256 o SHA-512 con iteraciones ≥ 210k (ajusta según sea necesario)
- Usa una sal única para cada hash; admite actualizaciones de parámetros
- Realiza la migración a parámetros de mayor costo durante el próximo inicio de sesión del usuario
- Establece el costo entre 10 y 14, dependiendo de las capacidades del servidor
- Evita problemas de truncamiento; hashea la contraseña completa
- Implementa limitación de tasa y monitoreo en los endpoints de autenticación
Evaluador de Fortaleza de Contraseñas
La fortaleza se aproxima mediante la entropía: entropía = log2(tamaño del grupo de caracteres) × longitud. Un grupo de caracteres más grande y una longitud mayor mejoran la resistencia al adivinamiento.
- Débil: < 50 bits —— Solo adecuado para escenarios de un solo uso o de bajo valor
- Aceptable: 50–80 bits —— Aceptable para escenarios de bajo riesgo
- Fuerte: 80–110 bits —— Objetivo predeterminado recomendado
- Excelente: > 110 bits —— Recomendado para administradores o cuentas críticas
Nota: Los modelos de ataque del mundo real pueden variar; evita reutilizar contraseñas y activa la autenticación multifactor (MFA).
Cómo Usar
- Selecciona la longitud y el conjunto de caracteres (Minúsc/Mayúsc/Números/Símbolos); activa opcionalmente "Evitar Caracteres Similares" y "Requerir Cada Tipo"
- Para un control más preciso: excluye caracteres específicos o grupos de caracteres, o elige subconjuntos de símbolos
- Elige cuántas contraseñas quieres generar, luego haz clic en Generar; los resultados por lotes se eliminan automáticamente los duplicados y puedes copiarlos todos a la vez
- Para validar contraseñas existentes, usa el Probador de Políticas; para frases de contraseña memorables, usa el Generador de Frases de Contraseña
Características
- Fuente aleatoria criptográficamente segura (Web Crypto)
- Conjuntos de caracteres y grupos de símbolos configurables
- Filtrado de caracteres similares y exclusiones personalizadas
- Generación masiva de 1 a 100 contraseñas, siempre únicas
- Métricas de fortaleza y entropía
- Probador de Políticas y Generador de Frases de Contraseña
- Ejemplos de código en varios idiomas
- Copia con un clic (individual o todas)
Base de Conocimientos de Contraseñas
- Entropía ≈ log2(tamaño del conjunto de caracteres) × longitud; la longitud suele contribuir más
- Objetivos recomendados: Cuentas generales ≥ 80 bits; Cuentas de alto privilegio/financieras ≥ 110 bits
- Conjunto de caracteres más amplio + longitud mayor → mayor resistencia a adivinanzas
- Agregar símbolos a ciegas es menos efectivo que aumentar la longitud
- Evita patrones predecibles (ej: siempre 'Mayúscula inicial + número al final!)
- Prioriza una longitud suficiente, luego aumenta moderadamente la diversidad de caracteres
- Secuencias de teclado (ej: qwerty), bloques repetidos, cumpleaños/años son fácilmente atacados mediante reglas
- Usar 'contraseña raíz + sufijo del sitio' genera reutilización de variantes, concentra el riesgo y hace las contraseñas más fáciles de adivinar
- Nunca reutilices la misma contraseña en múltiples sitios web
- Usa un gestor de contraseñas; asegura contraseñas únicas por sitio; activa MFA para cuentas críticas
- Evita transmitir contraseñas en texto plano por canales públicos; usa frases de contraseña 'pronunciables' cuando sea necesario
- Cambia y haz únicas las contraseñas inmediatamente si se detecta una fuga o reutilización
- Combinaciones de 4 a 6 palabras aleatorias suelen ser seguras y memorables
- Mezcla separadores, usa mayúsculas iniciales e inserta números para mejorar la seguridad y legibilidad
- Evita concatenar frases comunes, letras de canciones o citas famosas directamente
Mejores Prácticas de Seguridad de Contraseñas
- Usa una longitud suficiente: 16+ caracteres para cuentas generales, 24+ para las críticas
- Para facilitar su memorización, prioriza las frases de contraseña; usa un gestor de contraseñas para almacenar contraseñas aleatorias de alta seguridad
- Habilita la autenticación multifactor (MFA) siempre que sea posible
- Nunca reutilices contraseñas entre sitios: cada cuenta debe tener una contraseña única
La entropía mide la imprevisibilidad en función de la longitud y el tamaño del conjunto de caracteres. Cuantos más bits de entropía, mayor será la seguridad típicamente de la contraseña.
- Prioriza aumentar la longitud para obtener el máximo aumento de seguridad
- Utiliza múltiples conjuntos de caracteres cuando sea factible
- Excluir demasiados caracteres reduce el grupo de caracteres y debilita la seguridad
- Preferir requisitos de longitud y listas negras de contraseñas comunes/vazadas sobre reglas de composición complejas
- Evita rotaciones obligatorias frecuentes; cambia la contraseña solo cuando se detecte una brecha o riesgo
- Utiliza listas de contraseñas comprometidas para bloquear contraseñas comunes o vazadas
- Usa 4 a 6 palabras aleatorias unidas por separadores, por ejemplo: lago-ZANAHORIA-planeta_7
- Evita citas famosas, letras de canciones u otras frases comunes; la aleatoriedad importa más que la 'ingeniosidad'
- Para cuentas críticas, usa un gestor de contraseñas para almacenar contraseñas aleatorias realmente de alta entropía
- "Requerir cada conjunto seleccionado" asegura que aparezca al menos un carácter de cada categoría elegida
- "Evitar caracteres similares" mejora la legibilidad pero reduce ligeramente el tamaño del grupo de caracteres
- Los símbolos pueden limitarse a un subconjunto compatible con el sistema objetivo
- Nunca almacenes contraseñas en texto plano; utiliza hashing seguro (Argon2id/PBKDF2/Bcrypt) con salt
- Configura los parámetros (memoria/tiempo/coste) de forma adecuada; considera usar un pepper cuando sea necesario
- Limita los intentos de inicio de sesión y monitorea los fallos; aplica CAPTCHAs o verificación de dispositivo durante los ataques
- Preferir TOTP o claves hardware; evita el SMS siempre que sea posible
- Flujos de recuperación seguros con autenticación multifactor o verificación por correo electrónico y aplica periodos de espera
- Proporciona códigos de recuperación de respaldo y anima a los usuarios a almacenarlos de forma segura
- Implementa retrasos progresivos o bloqueos con puntuación de riesgo de IP/dispositivo
- Aplica WAF y limitación de tasa a APIs y formularios de inicio de sesión
- Monitorea el relleno de credenciales y anima a los usuarios a adoptar contraseñas únicas
- Utiliza un gestor de contraseñas de confianza para almacenamiento y autocompletado
- No compartas nunca contraseñas en texto plano por chat o correo electrónico; usa herramientas de gestión de secretos para equipos
- Si anotas las contraseñas offline, asegura su seguridad física
Cómo generar contraseñas mediante lenguajes de programación
function randomPassword(length = 16, sets = {lower:true, upper:true, digits:true, symbols:true}) {
const pools = {
lower: 'abcdefghijklmnopqrstuvwxyz',
upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
digits: '0123456789',
symbols: '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
};
let pool = '';
for (const k of Object.keys(sets)) if (sets[k]) pool += pools[k];
if (!pool) throw new Error('No charset');
// Rejection sampling removes modulo bias
const limit = Math.floor(0x100000000 / pool.length) * pool.length;
const buf = new Uint32Array(1);
let out = '';
for (let i = 0; i < length; i++) {
do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
out += pool[buf[0] % pool.length];
}
return out;
}
import secrets
def random_password(length=16, lower=True, upper=True, digits=True, symbols=True):
pools = {
'lower': 'abcdefghijklmnopqrstuvwxyz',
'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits': '0123456789',
'symbols': '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
}
pool = ''.join(v for k, v in pools.items() if locals()[k])
if not pool:
raise ValueError('No charset')
return ''.join(secrets.choice(pool) for _ in range(length))
function random_password($length = 16, $sets = ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]) {
$pools = [
'lower' => 'abcdefghijklmnopqrstuvwxyz',
'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits' => '0123456789',
'symbols' => '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
];
$pool = '';
foreach ($sets as $k => $on) if ($on) $pool .= $pools[$k];
if ($pool === '') throw new Exception('No charset');
$out = '';
for ($i = 0; $i < $length; $i++) {
$out .= $pool[random_int(0, strlen($pool)-1)];
}
return $out;
}
package main
import (
"crypto/rand"
"math/big"
)
func RandomPassword(length int, pool string) (string, error) {
out := make([]byte, length)
for i := 0; i < length; i++ {
nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(pool))))
if err != nil { return "", err }
out[i] = pool[nBig.Int64()]
}
return string(out), nil
}
import java.security.SecureRandom;
public class Pw {
static final String POOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
static final SecureRandom SR = new SecureRandom();
static String randomPassword(int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int idx = SR.nextInt(POOL.length());
sb.append(POOL.charAt(idx));
}
return sb.toString();
}
}
using System;
using System.Security.Cryptography;
public static class Pw {
public static string RandomPassword(int length, string pool) {
// GetInt32 draws an unbiased value in [0, pool.Length)
var chars = new char[length];
for (int i = 0; i < length; i++) {
chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
}
return new string(chars);
}
}
use rand::rngs::OsRng;
use rand::Rng;
fn random_password(length: usize, pool: &str) -> String {
// gen_range is uniform, so there is no modulo bias
let chars: Vec = pool.chars().collect();
(0..length)
.map(|_| chars[OsRng.gen_range(0..chars.len())])
.collect()
}
fn main() {
let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
let pw = random_password(16, pool);
println!("{}", pw);
}