Password Strength Checker

python

def is_strong(password):
    msg = 'Password must contain at least'
    if len(password) < 8:
        return False, msg + " 8 characters"

    has_upper = any(c.isupper() for c in password)
    has_lower = any(c.islower() for c in password)
    has_digit = any(c.isdigit() for c in password)
    special_chars = set("!@#$%^&*-_+=")
    has_special = any(c in special_chars for c in password)

    if not has_upper:
        return False, msg + " one uppercase letter."
    if not has_lower:
        return False, msg + " one lowercase letter."
    if not has_digit:
        return False, msg + " one digit."
    if not has_special:
        return False, msg + " one special char (!@#$%^&*-_+=)"

    return True, "Password is strong!"

password = input("Enter your password: ")
valid, message = is_strong(password)
print(message)

Enhanced Password Strength Checker

python

import re

def is_strong(password):
    """
    Check if a password is strong based on multiple criteria.
    Returns (is_valid, message) tuple.
    """
    # Define criteria and error messages
    criteria = [
        {
            'check': len(password) >= 8,
            'message': "at least 8 characters"
        },
        {
            'check': bool(re.search(r'[A-Z]', password)),
            'message': "one uppercase letter (A-Z)"
        },
        {
            'check': bool(re.search(r'[a-z]', password)),
            'message': "one lowercase letter (a-z)"
        },
        {
            'check': bool(re.search(r'[0-9]', password)),
            'message': "one digit (0-9)"
        },
        {
            'check': bool(re.search(r'[!@#$%^&*\-_+=]', password)),
            'message': "one special character (!@#$%^&*-_+=)"
        }
    ]
    
    # Check all criteria
    failed_checks = [criterion['message'] for criterion in criteria if not criterion['check']]
    
    if failed_checks:
        error_msg = "Password must contain:\n" + "\n".join(f"โ€ข {msg}" for msg in failed_checks)
        return False, error_msg
    
    return True, "โœ… Password is strong!"

def get_password_strength_score(password):
    """
    Calculate a password strength score (0-100)
    """
    score = 0
    
    # Length score (max 25 points)
    length = len(password)
    if length >= 12:
        score += 25
    elif length >= 8:
        score += 15
    elif length >= 6:
        score += 5
    
    # Character variety score (max 75 points)
    checks = [
        bool(re.search(r'[A-Z]', password)),  # Uppercase
        bool(re.search(r'[a-z]', password)),  # Lowercase
        bool(re.search(r'[0-9]', password)),  # Digits
        bool(re.search(r'[!@#$%^&*\-_+=]', password)),  # Special chars
        len(set(password)) / len(password) > 0.7  # Character diversity
    ]
    
    score += sum(15 for check in checks if check)  # 15 points per met criteria
    
    return min(score, 100)

def suggest_strong_password():
    """
    Generate a strong password suggestion
    """
    import random
    import string
    
    # Define character sets
    uppercase = string.ascii_uppercase
    lowercase = string.ascii_lowercase
    digits = string.digits
    special_chars = "!@#$%^&*-_+="
    
    # Generate password with at least one of each type
    password = [
        random.choice(uppercase),
        random.choice(lowercase),
        random.choice(digits),
        random.choice(special_chars)
    ]
    
    # Add more random characters to reach 12 characters
    all_chars = uppercase + lowercase + digits + special_chars
    password.extend(random.choice(all_chars) for _ in range(8))
    
    # Shuffle the password
    random.shuffle(password)
    
    return ''.join(password)

def password_strength_checker():
    """
    Interactive password strength checker
    """
    print("๐Ÿ” Password Strength Checker")
    print("=" * 40)
    print("Requirements:")
    print("โ€ข At least 8 characters")
    print("โ€ข Uppercase and lowercase letters")
    print("โ€ข At least one digit")
    print("โ€ข At least one special character (!@#$%^&*-_+=)")
    print("Type 'quit' to exit\n")
    
    while True:
        password = input("Enter your password: ").strip()
        
        if password.lower() in ['quit', 'exit', 'q']:
            print("Goodbye! ๐Ÿ‘‹")
            break
        
        if not password:
            print("Please enter a password!")
            continue
        
        # Check password strength
        is_valid, message = is_strong(password)
        strength_score = get_password_strength_score(password)
        
        print(f"\n๐Ÿ“Š Password Analysis:")
        print(f"Strength Score: {strength_score}/100")
        
        if is_valid:
            print("โœ… " + message)
            if strength_score >= 80:
                print("๐ŸŽ‰ Excellent password!")
            elif strength_score >= 60:
                print("๐Ÿ‘ Good password!")
            else:
                print("๐Ÿ’ช Password meets minimum requirements")
        else:
            print("โŒ Password is weak!")
            print(message)
        
        # Offer suggestion
        if not is_valid or strength_score < 60:
            suggest = input("\nWould you like a strong password suggestion? (y/n): ").lower()
            if suggest in ['y', 'yes']:
                suggested = suggest_strong_password()
                print(f"๐Ÿ’ก Suggested strong password: {suggested}")
                print("(Copy this password and use it securely)")
        
        print("-" * 40)

# Quick test function
def test_passwords():
    """
    Test various passwords
    """
    test_cases = [
        "weak",           # Too short
        "weakpassword",   # No uppercase, digits, or special
        "WeakPassword",   # No digits or special
        "Weak123",        # Too short, no special
        "Weak123!",       # Meets all criteria
        "VeryStrongPassword123!@#",  # Very strong
        "abc123",         # No uppercase, no special
        "ABC123!",        # No lowercase
    ]
    
    print("๐Ÿงช Password Test Cases:")
    print("=" * 50)
    
    for password in test_cases:
        is_valid, message = is_strong(password)
        score = get_password_strength_score(password)
        status = "โœ… STRONG" if is_valid else "โŒ WEAK"
        print(f"{password:25} -> {status} (Score: {score}/100)")
        if not is_valid:
            print(f"   Reasons: {message.split(':', 1)[1].strip()}")

if __name__ == "__main__":
    # Run interactive checker
    password_strength_checker()
    
    # Uncomment to run test cases
    # test_passwords()

Simple Version (Similar to Original)

python

import re

def is_strong(password):
    """
    Enhanced version of the original function with better error messages
    """
    if len(password) < 8:
        return False, "Password must contain at least 8 characters"
    
    checks = [
        (bool(re.search(r'[A-Z]', password)), "one uppercase letter (A-Z)"),
        (bool(re.search(r'[a-z]', password)), "one lowercase letter (a-z)"),
        (bool(re.search(r'[0-9]', password)), "one digit (0-9)"),
        (bool(re.search(r'[!@#$%^&*\-_+=]', password)), "one special character (!@#$%^&*-_+=)")
    ]
    
    missing = [msg for check, msg in checks if not check]
    
    if missing:
        error_msg = "Password must contain:\n" + "\n".join(f"โ€ข {msg}" for msg in missing)
        return False, error_msg
    
    return True, "โœ… Password is strong!"

# Main program
if __name__ == "__main__":
    password = input("Enter your password: ")
    valid, message = is_strong(password)
    print(message)

Key Improvements:

  1. Better Error Messages: Shows all missing requirements at once
  2. Regex Validation: More efficient character checking
  3. Strength Scoring: Quantitative strength measurement (0-100)
  4. Password Suggestions: Generates strong password suggestions
  5. Interactive Interface: User-friendly command-line interface
  6. Testing Function: Built-in test cases
  7. Character Diversity: Checks for repeated characters
  8. Modular Design: Separate functions for different functionalities

Example Output:

text

๐Ÿ” Password Strength Checker
========================================
Requirements:
โ€ข At least 8 characters
โ€ข Uppercase and lowercase letters
โ€ข At least one digit
โ€ข At least one special character (!@#$%^&*-_+=)
Type 'quit' to exit

Enter your password: weakpass

๐Ÿ“Š Password Analysis:
Strength Score: 20/100
โŒ Password is weak!
Password must contain:
โ€ข one uppercase letter (A-Z)
โ€ข one digit (0-9)
โ€ข one special character (!@#$%^&*-_+=)

Would you like a strong password suggestion? (y/n): y
๐Ÿ’ก Suggested strong password: X7g!k9@Lp2$q

This enhanced version provides much more detailed feedback and helpful features while maintaining the same core functionality as the original program!

Similar Posts

  • re.I, re.S, re.X

    Python re Flags: re.I, re.S, re.X Explained Flags modify how regular expressions work. They’re used as optional parameters in re functions like re.search(), re.findall(), etc. 1. re.I or re.IGNORECASE Purpose: Makes the pattern matching case-insensitive Without re.I (Case-sensitive): python import re text = “Hello WORLD hello World” # Case-sensitive search matches = re.findall(r’hello’, text) print(“Case-sensitive:”, matches) # Output: [‘hello’] # Only finds lowercase…

  • Formatting Date and Time in Python

    Formatting Date and Time in Python Python provides powerful formatting options for dates and times using the strftime() method and parsing using strptime() method. 1. Basic Formatting with strftime() Date Formatting python from datetime import date, datetime # Current date today = date.today() print(“Date Formatting Examples:”) print(f”Default: {today}”) print(f”YYYY-MM-DD: {today.strftime(‘%Y-%m-%d’)}”) print(f”MM/DD/YYYY: {today.strftime(‘%m/%d/%Y’)}”) print(f”DD-MM-YYYY: {today.strftime(‘%d-%m-%Y’)}”) print(f”Full month: {today.strftime(‘%B %d, %Y’)}”) print(f”Abbr…

  • Iterators in Python

    Iterators in Python An iterator in Python is an object that is used to iterate over iterable objects like lists, tuples, dictionaries, and sets. An iterator can be thought of as a pointer to a container’s elements. To create an iterator, you use the iter() function. To get the next element from the iterator, you…

  • Method overriding

    Method overriding is a key feature of object-oriented programming (OOP) and inheritance. It allows a subclass (child class) to provide its own specific implementation of a method that is already defined in its superclass (parent class). When a method is called on an object of the child class, the child’s version of the method is…

Leave a Reply

Your email address will not be published. Required fields are marked *