# password_strength_checker.py
# Foydalanish: python3 password_strength_checker.py password_list.txt
# password_list.txt - har qatorda bitta parol
import sys
import re
def score_password(pw):
score = 0
reasons = []
if len(pw) >= 12:
score += 3
elif len(pw) >= 8:
score += 2
elif len(pw) >= 6:
score += 1
else:
reasons.append("Too short (<6)")
if re.search(r'[a-z]', pw) and re.search(r'[A-Z]', pw):
score += 2
elif re.search(r'[a-z]', pw) or re.search(r'[A-Z]', pw):
score += 1
else:
reasons.append("No letters")
if re.search(r'\d', pw):
score += 1
else:
reasons.append("No digits")
if re.search(r'[^A-Za-z0-9]', pw):
score += 2
else:
reasons.append("No special characters")
# common patterns to warn about
if pw.lower() in ('password', '123456', 'qwerty', 'admin'):
reasons.append("Very common password")
return score, reasons
def grade(score):
if score >= 7:
return "STRONG"
if score >= 4:
return "MEDIUM"
return "WEAK"
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python3 password_strength_checker.py passwords.txt")
sys.exit(1)
path = sys.argv[1]
with open(path, 'r', encoding='utf-8') as f:
for ln in f:
pw = ln.strip()
if not pw:
continue
score, reasons = score_password(pw)
print(f"{pw} -> {grade(score)} (score={score})", end='')
if reasons:
print(" | issues: " + "; ".join(reasons))
else:
print()
Комментарии
Отправить комментарий