当前位置:首页>python>Python 密码生成器

Python 密码生成器

  • 2026-08-28 02:13:35
Python 密码生成器

"""

随机密码生成器

可以生成指定长度和复杂度的密码

"""

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()

最新文章

随机文章