吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 548|回复: 5
收起左侧

[Windows] 用python写了一个简单的密码生成代码

[复制链接]
olivertang 发表于 2026-9-24 14:20
日常上网过程中,经常会出现需要设置强密码,但每次设置的密码,又带有自己特有的习惯,如果了解你的人,还是会很有概率猜测出你的密码。
这里用代码实现了一个,密码生成器,很简陋,方便自己使用,有需要的自己也可以借鉴

运行结果

运行结果

"""python
随机密码生成工具
使用 secrets 模块生成安全随机密码,支持命令行参数指定长度和输出文件路径。
"""

import secrets
import string
import argparse
import csv
import os
from datetime import datetime


def generate_password(length=12):
    """生成包含大小写字母、数字和特殊符号的随机密码。

    确保密码中至少包含每种字符类型各一个,其余字符从全部字符集中随机选取。
    """
    if length < 4:
        raise ValueError("密码长度不能小于4(需至少包含每种字符类型各一个)")

    uppercase = string.ascii_uppercase
    lowercase = string.ascii_lowercase
    digits = string.digits
    special = "!@#$%^&*()-_=+[]{}|;:,.<>?"

    # 先确保每种字符至少出现一次
    password = [
        secrets.choice(uppercase),
        secrets.choice(lowercase),
        secrets.choice(digits),
        secrets.choice(special),
    ]

    all_chars = uppercase + lowercase + digits + special
    password += [secrets.choice(all_chars) for _ in range(length - 4)]

    # 打乱顺序(使用 secrets 的安全随机方式)
    # Fisher-Yates 洗牌算法
    for i in range(len(password) - 1, 0, -1):
        j = secrets.randbelow(i + 1)
        password, password[j] = password[j], password

    return "".join(password)


def save_to_csv(password, length, output_file):
    """将密码信息追加写入 CSV 文件。

    如果文件不存在则自动创建并写入表头。
    """
    file_exists = os.path.isfile(output_file)

    try:
        with open(output_file, "a", newline="", encoding="utf-8") as f:
            writer = csv.writer(f)
            if not file_exists:
                writer.writerow(["时间戳", "密码", "长度"])
            writer.writerow([
                datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                password,
                length,
            ])
    except OSError as e:
        print(f"文件写入失败: {e}")
        raise


def main():
    parser = argparse.ArgumentParser(description="随机密码生成工具")
    parser.add_argument(
        "-l", "--length",
        type=int,
        default=12,
        help="密码长度(默认12位)",
    )
    parser.add_argument(
        "-o", "--output",
        type=str,
        default="passwords.csv",
        help="输出CSV文件路径(默认 passwords.csv)",
    )
    args = parser.parse_args()

    try:
        password = generate_password(args.length)
    except ValueError as e:
        print(f"错误: {e}")
        return

    save_to_csv(password, args.length, args.output)
    print(f"已生成密码: {password}")
    print(f"长度: {args.length} | 已保存至: {args.output}")


if __name__ == "__main__":
    main()

发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

8204118 发表于 2026-9-24 14:47
edge浏览器就自带随机生成复杂密码
halfone 发表于 2026-9-24 16:17
帮你整理了下格式:
[Python] 纯文本查看 复制代码
python
随机密码生成工具
使用 secrets 模块生成安全随机密码,支持命令行参数指定长度和输出文件路径。
"""

import secrets
import string
import argparse
import csv
import os
from datetime import datetime


def generate_password(length=12):
    """生成包含大小写字母、数字和特殊符号的随机密码。

    确保密码中至少包含每种字符类型各一个,其余字符从全部字符集中随机选取。
    """
    if length < 4:
        raise ValueError("密码长度不能小于4(需至少包含每种字符类型各一个)")

    uppercase = string.ascii_uppercase
    lowercase = string.ascii_lowercase
    digits = string.digits
    special = "!@#$%^&*()-_=+[]{}|;:,.<>?"

    # 先确保每种字符至少出现一次
    password = [
        secrets.choice(uppercase),
        secrets.choice(lowercase),
        secrets.choice(digits),
        secrets.choice(special),
    ]

    all_chars = uppercase + lowercase + digits + special
    password += [secrets.choice(all_chars) for _ in range(length - 4)]

    # 打乱顺序(使用 secrets 的安全随机方式)
    # Fisher-Yates 洗牌算法
    for i in range(len(password) - 1, 0, -1):
        j = secrets.randbelow(i + 1)
        password, password[j] = password[j], password

    return "".join(password)


def save_to_csv(password, length, output_file):
    """将密码信息追加写入 CSV 文件。

    如果文件不存在则自动创建并写入表头。
    """
    file_exists = os.path.isfile(output_file)

    try:
        with open(output_file, "a", newline="", encoding="utf-8") as f:
            writer = csv.writer(f)
            if not file_exists:
                writer.writerow(["时间戳", "密码", "长度"])
            writer.writerow([
                datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                password,
                length,
            ])
    except OSError as e:
        print(f"文件写入失败: {e}")
        raise


def main():
    parser = argparse.ArgumentParser(description="随机密码生成工具")
    parser.add_argument(
        "-l", "--length",
        type=int,
        default=12,
        help="密码长度(默认12位)",
    )
    parser.add_argument(
        "-o", "--output",
        type=str,
        default="passwords.csv",
        help="输出CSV文件路径(默认 passwords.csv)",
    )
    args = parser.parse_args()

    try:
        password = generate_password(args.length)
    except ValueError as e:
        print(f"错误: {e}")
        return

    save_to_csv(password, args.length, args.output)
    print(f"已生成密码: {password}")
    print(f"长度: {args.length} | 已保存至: {args.output}")


if __name__ == "__main__":
    main()
呼噜哥 发表于 2026-9-24 17:10
Huberyxu 发表于 2026-9-24 17:26
wow~ ⊙o⊙,半吊子看的一知半解,拿来试试看,谢谢
tutu2 发表于 2026-9-24 18:42
Huberyxu 发表于 2026-9-24 17:26
wow~ ⊙o⊙,半吊子看的一知半解,拿来试试看,谢谢

大可不必  现在浏览器自带复杂密码   复制粘贴下来就行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-9-25 03:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表