#!/usr/bin/env python3
"""
Secure Random Password Generator
Generates cryptographically secure random passwords
"""
import secrets
import string
def generate_password(length=16, use_symbols=True, use_numbers=True, use_uppercase=True, use_lowercase=True):
"""
Generate a secure random password
Args:
length (int): Length of the password (default: 16)
use_symbols (bool): Include special characters
use_numbers (bool): Include numbers
use_uppercase (bool): Include uppercase letters
use_lowercase (bool): Include lowercase letters
Returns:
str: Randomly generated password
"""
characters = ''
if use_lowercase:
characters += string.ascii_lowercase
if use_uppercase:
characters += string.ascii_uppercase
if use_numbers:
characters += string.digits
if use_symbols:
characters += string.punctuation
if not characters:
raise ValueError("At least one character type must be selected")
# Ensure password has at least one of each selected type
password = []
if use_lowercase:
password.append(secrets.choice(string.ascii_lowercase))
if use_uppercase:
password.append(secrets.choice(string.ascii_uppercase))
if use_numbers:
password.append(secrets.choice(string.digits))
if use_symbols:
password.append(secrets.choice(string.punctuation))
# Fill the rest randomly
for _ in range(length - len(password)):
password.append(secrets.choice(characters))
# Shuffle to avoid predictable patterns
secrets.SystemRandom().shuffle(password)
return ''.join(password)
def generate_passphrase(word_count=4, separator='-'):
"""
Generate a memorable passphrase using random words
Example: correct-horse-battery-staple
"""
# Simple word list (in production, use a larger dictionary)
words = [
'alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot',
'golf', 'hotel', 'india', 'juliet', 'kilo', 'lima',
'mike', 'november', 'oscar', 'papa', 'quebec', 'romeo',
'sierra', 'tango', 'uniform', 'victor', 'whiskey', 'xray',
'yankee', 'zulu', 'tiger', 'eagle', 'falcon', 'raven',
'phoenix', 'dragon', 'wolf', 'bear', 'lion', 'panther'
]
selected_words = [secrets.choice(words) for _ in range(word_count)]
return separator.join(selected_words)
if __name__ == '__main__':
print("=== Password Generator ===\n")
print("Strong password (16 chars):")
print(generate_password(16))
print("\nExtra strong password (24 chars):")
print(generate_password(24))
print("\nAlphanumeric only (no symbols):")
print(generate_password(16, use_symbols=False))
print("\nMemorable passphrase:")
print(generate_passphrase(4))
print("\nGenerate 5 passwords:")
for i in range(5):
print(f" {i+1}. {generate_password(16)}")