Véase también What is the best way to check the strength of a password?¿cómo se calcula la complejidad de la contraseña?
Algunas aplicaciones (o sitios web) calculan la complejidad de una contraseña cuando la escribe. Suelen mostrar una barra roja que se vuelve naranja, luego verde, y aún más verde a medida que su contraseña se alarga, y contiene más clases de caracteres (es decir, minúsculas, mayúsculas, puntuación, dígitos ...)
Aquí está el algoritmo I utilizar.
private int GetPasswordComplexity(string password)
{
if (password.Length <= 4)
return 1;
int complexity = 0;
int digit = 0;
int letter = 0;
int cap = 0;
int other = 0;
for (int i = 0; i < password.Length; i++)
{
if (char.IsDigit(password[i]) && i!=password.Length-1)
digit = 1;
else if (char.IsLower(password[i]))
letter = 1;
else if (char.IsUpper(password[i]) && i!=0)
cap = 1;
else
other = 1;
}
complexity = digit + letter + cap + other;
if (password.Length <= 7)
complexity = Math.Min(3, complexity);
return complexity;
}
Me preocupa el hecho de que mi algoritmo calificaría "Password1!" como "muy fuerte" y "] @ feé: m" como "débil" porque solo tiene 7 caracteres de largo.
EDIT: He actualizado ligeramente el algoritmo para ignorar las letras mayúsculas y los dígitos cuando son, respectivamente, el primer y el último carácter de la contraseña.
¿Alguien aquí tiene experiencia con este tipo de problemas? ¿Cómo agregarías un diccionario para detectar palabras comunes?
Descripción absolutamente genial. ¡Muchas muchas gracias! –
Buenas ideas. Pero: Complejidad ("PasswordPassword") = 52^17 = 1.5^10^29 Complejidad ("!:^DE1") = 94^6 = 6x10^11 Ahora, ¿qué contraseña es más fuerte? – Brann
Es solo una medida aproximada. También es probable que desee también seleccionar las contraseñas más comunes. http://www.modernlifeisrubbish.co.uk/article/top-10-most-common-passwords http://lawprofessors.typepad.com/law_librarian_blog/2007/05/10_most_common_.html – tvanfosson