MoK: Bug bei der Passwordprüfung behoben
This commit is contained in:
@@ -27,145 +27,40 @@ namespace BeWoPlanerMobil.Util
|
||||
private int _Score;
|
||||
private int _PreviousValue;
|
||||
private bool _Schalter;
|
||||
private List<int> _PreviousValues = new List<int>();
|
||||
private readonly List<int> _PreviousValues = new List<int>();
|
||||
|
||||
public int EvaluatePasswordStrength(string passwordToEvaluate)
|
||||
{
|
||||
var passwordStrength = 0;
|
||||
if(!string.IsNullOrEmpty(passwordToEvaluate))
|
||||
{
|
||||
var partialPassword = string.Empty;
|
||||
var passwordStrength = 0;
|
||||
|
||||
foreach(var token in passwordToEvaluate)
|
||||
{
|
||||
partialPassword += token.ToString();
|
||||
|
||||
if(partialPassword.Length < _PartialPassword.Length)
|
||||
{
|
||||
_IsPartial = true;
|
||||
_PasswordLengthDifference = _PartialPassword.Length - partialPassword.Length;
|
||||
}
|
||||
|
||||
if(!_PartialPassword.Equals(partialPassword))
|
||||
{
|
||||
_PartialPassword = partialPassword;
|
||||
}
|
||||
|
||||
passwordStrength = EvaluatePartialPasswordStrength(partialPassword);
|
||||
}
|
||||
|
||||
return passwordStrength;
|
||||
}
|
||||
|
||||
_Score = 0;
|
||||
_PreviousValue = 0;
|
||||
|
||||
if(string.IsNullOrWhiteSpace(passwordToEvaluate))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(_IsPartial)
|
||||
{
|
||||
if(_PasswordLengthDifference == 1)
|
||||
{
|
||||
_Score -= _PreviousValues.Last();
|
||||
_PreviousValues.RemoveAt(_PreviousValues.Count - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(var i = 0; i < _PasswordLengthDifference; i++)
|
||||
{
|
||||
_Score += _PreviousValues.Last();
|
||||
_PreviousValues.RemoveAt(_PreviousValues.Count - 1);
|
||||
}
|
||||
}
|
||||
|
||||
_IsPartial = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var passwordLength = passwordToEvaluate.Length;
|
||||
|
||||
if(passwordLength > 5 && passwordLength < 9)
|
||||
{
|
||||
AddLengthScore(1);
|
||||
}
|
||||
|
||||
if(passwordLength > 8 && passwordLength < 12)
|
||||
{
|
||||
AddLengthScore(2);
|
||||
}
|
||||
|
||||
if(passwordLength > 11 && passwordLength < 18)
|
||||
{
|
||||
AddLengthScore(3);
|
||||
}
|
||||
|
||||
if(passwordLength > 17)
|
||||
{
|
||||
AddLengthScore(4);
|
||||
}
|
||||
|
||||
// Ziffern
|
||||
if(passwordToEvaluate.Any(character => Numbers.Contains(character)))
|
||||
{
|
||||
AddTokenScore(3);
|
||||
}
|
||||
|
||||
// Großbuchstaben
|
||||
if(passwordToEvaluate.Any(character => UppercaseLetters.Contains(character)))
|
||||
{
|
||||
AddTokenScore(3);
|
||||
}
|
||||
|
||||
// Großumlaute
|
||||
if(passwordToEvaluate.Any(character => UppercaseUmlauts.Contains(character)))
|
||||
{
|
||||
AddTokenScore(2);
|
||||
}
|
||||
|
||||
// Kleinbuchstaben
|
||||
if(passwordToEvaluate.Any(character => LowercaseLetters.Contains(character)))
|
||||
{
|
||||
AddTokenScore(2);
|
||||
}
|
||||
|
||||
// Kleinumlaute
|
||||
if(passwordToEvaluate.Any(character => LowercaseUmlauts.Contains(character)))
|
||||
{
|
||||
AddTokenScore(2);
|
||||
}
|
||||
|
||||
// Sonderzeichen
|
||||
if(passwordToEvaluate.Any(character => SpecialCharacters1.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(passwordToEvaluate.Any(character => SpecialCharacters2.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(passwordToEvaluate.Any(character => SpecialCharacters3.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(passwordToEvaluate.Any(character => SpecialCharacters4.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(passwordToEvaluate.Any(character => SpecialCharacters5.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
_PreviousValues.Add(_PreviousValue);
|
||||
}
|
||||
|
||||
if(_Score < 16)
|
||||
{
|
||||
passwordStrength = 0;
|
||||
}
|
||||
|
||||
if(_Score > 15 && _Score < 56)
|
||||
{
|
||||
passwordStrength = 1;
|
||||
}
|
||||
|
||||
if(_Score > 55 && _Score < 116)
|
||||
{
|
||||
passwordStrength = 2;
|
||||
}
|
||||
|
||||
if(_Score > 115 && _Score < 156)
|
||||
{
|
||||
passwordStrength = 3;
|
||||
}
|
||||
|
||||
if(_Score > 155)
|
||||
{
|
||||
passwordStrength = 4;
|
||||
}
|
||||
|
||||
return passwordStrength;
|
||||
return -1;
|
||||
}
|
||||
|
||||
private void AddLengthScore(int valueToAdd)
|
||||
@@ -227,5 +122,144 @@ namespace BeWoPlanerMobil.Util
|
||||
|
||||
return richtliniencount < 3 ? "Das Passwort muss mindestens drei Zeichen aus der Gruppe Sonderzeichen, Zahlen, Groß- und Kleinbuchstaben enthalten." : null;
|
||||
}
|
||||
|
||||
private int EvaluatePartialPasswordStrength(string partialPassword)
|
||||
{
|
||||
var passwordStrength = 0;
|
||||
_PreviousValue = 0;
|
||||
|
||||
if(string.IsNullOrWhiteSpace(partialPassword))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(_IsPartial)
|
||||
{
|
||||
if(_PasswordLengthDifference == 1)
|
||||
{
|
||||
_Score -= _PreviousValues.Last();
|
||||
_PreviousValues.RemoveAt(_PreviousValues.Count - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(var i = 0; i < _PasswordLengthDifference; i++)
|
||||
{
|
||||
_Score += _PreviousValues.Last();
|
||||
_PreviousValues.RemoveAt(_PreviousValues.Count - 1);
|
||||
}
|
||||
}
|
||||
|
||||
_IsPartial = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var passwordLength = partialPassword.Length;
|
||||
|
||||
if(passwordLength > 5 && passwordLength < 9)
|
||||
{
|
||||
AddLengthScore(1);
|
||||
}
|
||||
|
||||
if(passwordLength > 8 && passwordLength < 12)
|
||||
{
|
||||
AddLengthScore(2);
|
||||
}
|
||||
|
||||
if(passwordLength > 11 && passwordLength < 18)
|
||||
{
|
||||
AddLengthScore(3);
|
||||
}
|
||||
|
||||
if(passwordLength > 17)
|
||||
{
|
||||
AddLengthScore(4);
|
||||
}
|
||||
|
||||
// Ziffern
|
||||
if(partialPassword.Any(character => Numbers.Contains(character)))
|
||||
{
|
||||
AddTokenScore(3);
|
||||
}
|
||||
|
||||
// Großbuchstaben
|
||||
if(partialPassword.Any(character => UppercaseLetters.Contains(character)))
|
||||
{
|
||||
AddTokenScore(3);
|
||||
}
|
||||
|
||||
// Großumlaute
|
||||
if(partialPassword.Any(character => UppercaseUmlauts.Contains(character)))
|
||||
{
|
||||
AddTokenScore(2);
|
||||
}
|
||||
|
||||
// Kleinbuchstaben
|
||||
if(partialPassword.Any(character => LowercaseLetters.Contains(character)))
|
||||
{
|
||||
AddTokenScore(2);
|
||||
}
|
||||
|
||||
// Kleinumlaute
|
||||
if(partialPassword.Any(character => LowercaseUmlauts.Contains(character)))
|
||||
{
|
||||
AddTokenScore(2);
|
||||
}
|
||||
|
||||
// Sonderzeichen
|
||||
if(partialPassword.Any(character => SpecialCharacters1.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(partialPassword.Any(character => SpecialCharacters2.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(partialPassword.Any(character => SpecialCharacters3.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(partialPassword.Any(character => SpecialCharacters4.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
if(partialPassword.Any(character => SpecialCharacters5.Contains(character)))
|
||||
{
|
||||
AddTokenScore(4);
|
||||
}
|
||||
|
||||
_PreviousValues.Add(_PreviousValue);
|
||||
}
|
||||
|
||||
if(_Score < 16)
|
||||
{
|
||||
passwordStrength = 0;
|
||||
}
|
||||
|
||||
if(_Score > 15 && _Score < 56)
|
||||
{
|
||||
passwordStrength = 1;
|
||||
}
|
||||
|
||||
if(_Score > 55 && _Score < 116)
|
||||
{
|
||||
passwordStrength = 2;
|
||||
}
|
||||
|
||||
if(_Score > 115 && _Score < 156)
|
||||
{
|
||||
passwordStrength = 3;
|
||||
}
|
||||
|
||||
if(_Score > 155)
|
||||
{
|
||||
passwordStrength = 4;
|
||||
}
|
||||
|
||||
return passwordStrength;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user