Некоторые приложения (или веб-сайты) вычисляют сложность пароля при вводе.
Обычно они отображают красную полосу, которая становится оранжевой, затем зеленой, а затем еще более зеленой по мере того, как пароль становится длиннее, и содержит больше классов символов (например, строчные, прописные, знаки пунктуации, цифры).
Как я могу надежно рассчитать сложность пароля?
Я придумал следующий алгоритм, но меня беспокоит тот факт, что он оценивает Password1!
как "очень сильный" и ]@feé:m
как "слабый", потому что длина его всего 7 символов.
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;
}