-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpassword_analyzer.py
105 lines (84 loc) · 3.3 KB
/
password_analyzer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import re
import string
import getpass
class PasswordStrengthAnalyzer:
def __init__(self):
self.min_length = 8
self.score = 0
self.feedback = []
def check_length(self, password):
if len(password) >= self.min_length:
self.score += 1
self.feedback.append("✓ Password meets minimum length requirement")
else:
self.feedback.append("✗ Password should be at least 8 characters long")
def check_uppercase(self, password):
if any(c.isupper() for c in password):
self.score += 1
self.feedback.append("✓ Password contains uppercase letters")
else:
self.feedback.append("✗ Password should contain uppercase letters")
def check_lowercase(self, password):
if any(c.islower() for c in password):
self.score += 1
self.feedback.append("✓ Password contains lowercase letters")
else:
self.feedback.append("✗ Password should contain lowercase letters")
def check_numbers(self, password):
if any(c.isdigit() for c in password):
self.score += 1
self.feedback.append("✓ Password contains numbers")
else:
self.feedback.append("✗ Password should contain numbers")
def check_special_chars(self, password):
if any(c in string.punctuation for c in password):
self.score += 1
self.feedback.append("✓ Password contains special characters")
else:
self.feedback.append("✗ Password should contain special characters")
def check_common_patterns(self, password):
common_patterns = [
r'12345',
r'qwerty',
r'password',
r'admin'
]
if any(re.search(pattern, password.lower()) for pattern in common_patterns):
self.feedback.append("✗ Password contains common patterns")
else:
self.score += 1
self.feedback.append("✓ Password doesn't contain common patterns")
def analyze_password(self, password):
self.score = 0
self.feedback = []
self.check_length(password)
self.check_uppercase(password)
self.check_lowercase(password)
self.check_numbers(password)
self.check_special_chars(password)
self.check_common_patterns(password)
strength = (self.score / 6) * 100
return strength, self.feedback
def main():
analyzer = PasswordStrengthAnalyzer()
print("Password Strength Analyzer")
print("=========================")
while True:
password = getpass.getpass("Enter a password to analyze (or 'q' to quit): ")
if password.lower() == 'q':
break
strength, feedback = analyzer.analyze_password(password)
print("\nPassword Strength Analysis:")
print("---------------------------")
for item in feedback:
print(item)
print(f"\nOverall Strength: {strength:.1f}%")
if strength < 50:
print("Verdict: Weak password")
elif strength < 80:
print("Verdict: Moderate password")
else:
print("Verdict: Strong password")
print("\n")
if __name__ == "__main__":
main()