From dc69e7146505b2fee5d9aacb4b429c02b5139e70 Mon Sep 17 00:00:00 2001 From: Lyndon Jetten Date: Thu, 21 Dec 2023 15:05:33 +0100 Subject: [PATCH] =?UTF-8?q?MoK:=20Bug=20bei=20der=20Passwordpr=C3=BCfung?= =?UTF-8?q?=20behoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWoPlanerMobil/Util/PasswordUtils.cs | 302 ++++++++++++++------------ 1 file changed, 168 insertions(+), 134 deletions(-) diff --git a/BeWoPlanerMobil/Util/PasswordUtils.cs b/BeWoPlanerMobil/Util/PasswordUtils.cs index f38ff5b3f..de51ef4fc 100644 --- a/BeWoPlanerMobil/Util/PasswordUtils.cs +++ b/BeWoPlanerMobil/Util/PasswordUtils.cs @@ -27,145 +27,40 @@ namespace BeWoPlanerMobil.Util private int _Score; private int _PreviousValue; private bool _Schalter; - private List _PreviousValues = new List(); + private readonly List _PreviousValues = new List(); 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; + } } } \ No newline at end of file