Utilities/PasswordChecker.py

changeset 1130
3e9f0330f833
parent 1127
b1802ebe0066
child 1509
c0b5e693b0eb
equal deleted inserted replaced
1128:b8ab8eac9dde 1130:3e9f0330f833
99 "factor": 0.0, 99 "factor": 0.0,
100 "bonus": 10, 100 "bonus": 10,
101 "penalty": -10, 101 "penalty": -10,
102 } 102 }
103 103
104 # number of lowercase letters, such as a-z 104 # number of lowercase letters, such as a-z
105 self.lowercaseLetters = { 105 self.lowercaseLetters = {
106 "count": 0, 106 "count": 0,
107 "minimum": 1, 107 "minimum": 1,
108 "status": self.Status_Failed, 108 "status": self.Status_Failed,
109 "rating": 0, 109 "rating": 0,
282 """ 282 """
283 # how long is the password? 283 # how long is the password?
284 self.passwordLength["count"] = len(password) 284 self.passwordLength["count"] = len(password)
285 self.recommendedPasswordLength["count"] = len(password) 285 self.recommendedPasswordLength["count"] = len(password)
286 286
287 # Loop through password to check for Symbol, Numeric, Lowercase 287 # Loop through password to check for Symbol, Numeric, Lowercase
288 # and Uppercase pattern matches 288 # and Uppercase pattern matches
289 for index in range(len(password)): 289 for index in range(len(password)):
290 if self.uppercaseRe.match(password[index]): 290 if self.uppercaseRe.match(password[index]):
291 self.uppercaseLetters["count"] += 1 291 self.uppercaseLetters["count"] += 1
292 elif self.lowercaseRe.match(password[index]): 292 elif self.lowercaseRe.match(password[index]):
309 for index2 in range(index1 + 1, len(password)): 309 for index2 in range(index1 + 1, len(password)):
310 if password[index1] == password[index2]: 310 if password[index1] == password[index2]:
311 found = True 311 found = True
312 break 312 break
313 if not found: 313 if not found:
314 uniqueCharacters.append(password[index1] ) 314 uniqueCharacters.append(password[index1])
315 315
316 # calculate a redundancy number 316 # calculate a redundancy number
317 self.redundancy["value"] = len(password) / len(uniqueCharacters) 317 self.redundancy["value"] = len(password) / len(uniqueCharacters)
318 318
319 # Check for sequential alpha string patterns (forward and reverse) but only, 319 # Check for sequential alpha string patterns (forward and reverse) but only,
320 # if the string has already a length to check for, does not make sense to check 320 # if the string has already a length to check for, does not make sense to check
321 # the password "ab" for the sequential data "abc" 321 # the password "ab" for the sequential data "abc"
322 lowercasedPassword = password.lower(); 322 lowercasedPassword = password.lower()
323 323
324 if self.passwordLength["count"] >= self.sequentialLetters["length"]: 324 if self.passwordLength["count"] >= self.sequentialLetters["length"]:
325 for index in range(len(self.sequentialLetters["data"]) - \ 325 for index in range(len(self.sequentialLetters["data"]) - \
326 self.sequentialLetters["length"] + 1): 326 self.sequentialLetters["length"] + 1):
327 fwd = self.sequentialLetters["data"][ 327 fwd = self.sequentialLetters["data"][
346 346
347 # Check common keyboard patterns 347 # Check common keyboard patterns
348 patternsMatched = [] 348 patternsMatched = []
349 if self.passwordLength["count"] >= self.keyboardPatterns["length"]: 349 if self.passwordLength["count"] >= self.keyboardPatterns["length"]:
350 for pattern in self.keyboardPatterns["data"]: 350 for pattern in self.keyboardPatterns["data"]:
351 for index in range(len(pattern)- self.keyboardPatterns["length"] + 1): 351 for index in range(len(pattern) - self.keyboardPatterns["length"] + 1):
352 fwd = pattern[index:index + self.keyboardPatterns["length"]] 352 fwd = pattern[index:index + self.keyboardPatterns["length"]]
353 rev = self.__strReverse(fwd) 353 rev = self.__strReverse(fwd)
354 if lowercasedPassword.find(fwd) != -1: 354 if lowercasedPassword.find(fwd) != -1:
355 if fwd not in patternsMatched: 355 if fwd not in patternsMatched:
356 self.keyboardPatterns["count"] += 1 356 self.keyboardPatterns["count"] += 1
392 else: 392 else:
393 self.passwordLength["rating"] = self.passwordLength["penalty"] 393 self.passwordLength["rating"] = self.passwordLength["penalty"]
394 self.score["count"] += self.passwordLength["rating"] 394 self.score["count"] += self.passwordLength["rating"]
395 395
396 # recommendedPasswordLength 396 # recommendedPasswordLength
397 # Credit reaching the recommended password length or put a 397 # Credit reaching the recommended password length or put a
398 # penalty on it 398 # penalty on it
399 if self.passwordLength["count"] >= self.recommendedPasswordLength["minimum"]: 399 if self.passwordLength["count"] >= self.recommendedPasswordLength["minimum"]:
400 self.recommendedPasswordLength["rating"] = \ 400 self.recommendedPasswordLength["rating"] = \
401 self.recommendedPasswordLength["bonus"] + \ 401 self.recommendedPasswordLength["bonus"] + \
402 (self.passwordLength["count"] - \ 402 (self.passwordLength["count"] - \

eric ide

mercurial