"""
随机密码生成器
可以生成指定长度和复杂度的密码
"""
import random
import string
import secrets
def generate_password(length=12, use_uppercase=True, use_digits=True, use_special=True):
"""
生成随机密码
参数:
length: 密码长度
use_uppercase: 是否使用大写字母
use_digits: 是否使用数字
use_special: 是否使用特殊字符
返回:
生成的密码字符串
"""
# 定义字符集
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase if use_uppercase else ""
digits = string.digits if use_digits else ""
special = "!@#$%^&*()-_=+[]{}|;:,.<>?" if use_special else ""
# 组合所有可用的字符
all_chars = lowercase + uppercase + digits + special
if not all_chars:
return "错误:必须至少选择一种字符类型"
# 确保密码包含每种类型(如果启用)
password_parts = []
password_parts.append(random.choice(lowercase))
if use_uppercase:
password_parts.append(random.choice(uppercase))
if use_digits:
password_parts.append(random.choice(digits))
if use_special:
password_parts.append(random.choice(special))
# 填充剩余长度
remaining_length = length - len(password_parts)
for _ in range(remaining_length):
password_parts.append(secrets.choice(all_chars))
# 打乱顺序
random.shuffle(password_parts)
return ''.join(password_parts)
def password_strength_checker(password):
"""检查密码强度"""
length = len(password)
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)
has_special = any(c in "!@#$%^&*()-_=+[]{}|;:,.<>?" for c in password)
score = 0
feedback = []
# 长度评分
if length >= 12:
score += 3
elif length >= 8:
score += 2
elif length >= 6:
score += 1
else:
feedback.append("密码太短(建议至少8位)")
# 字符类型评分
type_count = sum([has_upper, has_lower, has_digit, has_special])
score += type_count
if not has_upper:
feedback.append("建议包含大写字母")
if not has_lower:
feedback.append("建议包含小写字母")
if not has_digit:
feedback.append("建议包含数字")
if not has_special:
feedback.append("建议包含特殊字符")
# 强度评级
if score >= 6:
strength = "🔒 非常强"
elif score >= 4:
strength = "🔐 强"
elif score >= 3:
strength = "🔑 中等"
else:
strength = "⚠️ 弱"
return {
"strength": strength,
"score": score,
"length": length,
"has_upper": has_upper,
"has_lower": has_lower,
"has_digit": has_digit,
"has_special": has_special,
"feedback": feedback
}
def password_generator_app():
"""密码生成器主程序"""
print("🔐 安全密码生成器")
print("=" * 50)
while True:
print("\n请选择操作:")
print("1. 生成随机密码")
print("2. 检查密码强度")
print("3. 批量生成密码")
print("4. 退出")
print("-" * 30)
choice = input("请输入选择 (1-4): ")
if choice == "1":
print("\n🔧 配置密码参数:")
try:
length = int(input("密码长度 (默认12): ") or "12")
if length < 4:
print("密码长度至少为4!")
continue
use_upper = input("包含大写字母? (y/n, 默认y): ").lower() != 'n'
use_digits = input("包含数字? (y/n, 默认y): ").lower() != 'n'
use_special = input("包含特殊字符? (y/n, 默认y): ").lower() != 'n'
# 生成密码
password = generate_password(length, use_upper, use_digits, use_special)
print("\n" + "="*50)
print("生成的密码:")
print(f"🔑 {password}")
print("="*50)
# 检查密码强度
strength_info = password_strength_checker(password)
print(f"强度评估: {strength_info['strength']} (得分: {strength_info['score']}/7)")
if strength_info['feedback']:
print("\n改进建议:")
for tip in strength_info['feedback']:
print(f" • {tip}")
# 提供复制建议
print(f"\n💡 密码长度: {len(password)} 字符")
except ValueError:
print("请输入有效的数字!")
elif choice == "2":
print("\n请输入要检查的密码:")
password = input("密码: ")
if password:
strength_info = password_strength_checker(password)
print("\n" + "="*50)
print("🔍 密码分析结果:")
print("="*50)
print(f"密码: {'*' * len(password)}")
print(f"强度: {strength_info['strength']}")
print(f"得分: {strength_info['score']}/7")
print(f"长度: {strength_info['length']} 字符")
print(f"包含大写字母: {'是' if strength_info['has_upper'] else '否'}")
print(f"包含小写字母: {'是' if strength_info['has_lower'] else '否'}")
print(f"包含数字: {'是' if strength_info['has_digit'] else '否'}")
print(f"包含特殊字符: {'是' if strength_info['has_special'] else '否'}")
if strength_info['feedback']:
print("\n💡 安全建议:")
for tip in strength_info['feedback']:
print(f" • {tip}")
else:
print("\n✅ 密码安全性良好!")
else:
print("密码不能为空!")
elif choice == "3":
print("\n批量生成密码")
try:
count = int(input("生成密码数量 (默认5): ") or "5")
length = int(input("每个密码长度 (默认12): ") or "12")
if count < 1 or length < 4:
print("数量至少为1,长度至少为4!")
continue
print("\n" + "="*50)
print(f"生成 {count} 个密码,每个 {length} 位:")
print("="*50)
for i in range(count):
password = generate_password(length)
strength = password_strength_checker(password)['strength']
print(f"{i+1:2d}. {password} - {strength}")
print("="*50)
print("💡 提示:建议将密码保存在安全的地方")
except ValueError:
print("请输入有效的数字!")
elif choice == "4":
print("感谢使用密码生成器!再见!")
break
else:
print("无效的选项,请重新选择!")
# 运行密码生成器
if __name__ == "__main__":
password_generator_app()