如何用脚本生成随机密码本

wen 实用脚本 1

用Python脚本高效生成高安全随机密码本的全指南

如何用脚本生成随机密码本


目录导读

  1. 为什么你需要一个“随机密码本”?(而非密码管理器)
  2. 生成随机密码的核心原则:熵、长度与字符集
  3. 手把手写一个可配置的Python密码生成脚本
  4. 进阶:生成批量密码本(CSV/文本格式)并防止重复
  5. 安全警示:密码本的存储与销毁
  6. 常见问题(FAQ)与搜索引擎高频问答
  7. 脚本化的边界——你该信任谁?

为什么你需要一个“随机密码本”?

很多用户依赖浏览器自动保存密码或第三方密码管理器(如LastPass、1Password),但当你需要为团队创建临时测试账号、为物联网设备设置初始密码、或者需要离线存储数百个一次性密钥时,传统密码管理器就显得笨重,一个随机密码本(即批量生成的唯一密码列表)能让你批量分发、审计和轮换凭据,脚本生成的核心价值在于:可复现、可定制、完全离线

生成随机密码的核心原则

在写脚本前,请理解三个硬性指标:

  • 熵(Entropy):密码的不可预测性,至少需要60比特(bit)熵才能抵御暴力破解,公式:熵 = 长度 × log2(字符集大小)
  • 字符集:建议包含大写(26)、小写(26)、数字(10)及特殊符号(32),总字符集为94个字符,单字符熵约为6.55比特,因此12位随机密码的熵约为78比特,足够安全。
  • 随机源:务必使用密码学安全的随机数生成器(CSPRNG),在Python中,使用secrets模块而非random模块,因为random是伪随机,可被预测。

手把手写一个可配置的Python密码生成脚本

以下是一个精简但强大的脚本,支持自定义长度、数量及排除易混淆字符(如0O1lI)。

import secrets
import string
def generate_password(length=16, exclude_similar=True):
    chars = string.ascii_letters + string.digits + "!@#$%^&*"
    if exclude_similar:
        chars = ''.join(c for c in chars if c not in '0O1lI|')
    return ''.join(secrets.choice(chars) for _ in range(length))
def generate_password_book(count=100, length=16, filename="passwords.txt"):
    seen = set()
    with open(filename, 'w') as f:
        f.write("Index,Password\n")  # CSV头
        for i in range(1, count+1):
            pwd = generate_password(length)
            while pwd in seen:  # 防止重复
                pwd = generate_password(length)
            seen.add(pwd)
            f.write(f"{i},{pwd}\n")
    print(f"[+] 已生成 {count} 个密码,保存至 {filename}")
if __name__ == "__main__":
    generate_password_book(count=50, length=12)

运行方式:将脚本保存为gen_pwd.py,在终端执行python3 gen_pwd.py,输出为CSV文件,方便导入Excel或其他系统。

进阶:生成批量密码本并防止重复

上例中的seen集合确保每个密码唯一,但若需要生成10万条以上,内存会紧张,可以采用确定性随机偏移:基于计数器+盐的方式生成,或使用数据库临时表去重,对于99%的场景,secrets+集合足够。

关键优化点

  • 使用os.urandom底层熵池,避免系统熵不足。
  • 若需密码可读性(如人工输入场景),可限制字符集为[A-Z][a-z][2-9]并去掉符号。

安全警示:密码本的存储与销毁

  • 存储:密码本以明文形式存放时,必须放置在加密卷(如VeraCrypt、BitLocker)或权限为600的目录内,切勿提交到Git仓库。
  • 传输:如需发送,使用ageGPG加密文件后再发送。
  • 销毁:覆盖删除文件(shred -u命令)胜于普通删除,若在SSD上,需使用安全擦除工具。

常见问题(FAQ)与搜索引擎高频问答

Q1:这个脚本生成的密码安全吗?
A1:使用secrets模块(基于系统加密熵),安全等级等同/dev/urandom,只要长度≥12且字符集含符号,暴力破解时间远超宇宙年龄。

Q2:如何让密码同时满足网站的特殊要求(如必须含数字和大小写)?
A2:在脚本末尾追加断言检查:

while not any(c.isupper() for c in pwd) or not any(c.isdigit() for c in pwd):
    pwd = generate_password(length)

这会轻微降低随机性,但可接受。

Q3:可以生成带特定前缀的密码吗?
A3:可以,在generate_password内拼接固定字符串,但注意降低熵,建议仅用于临时环境标识。

Q4:如何用命令行一键生成?
A4:在脚本中加入argparse参数,例如python3 gen_pwd.py -n 20 -l 16 -o out.csv,方便运维调用。

Q5:这个脚本能防止“撞库”吗?
A5:不能,撞库攻击取决于你在多个站点是否重用密码,密码本仅提供唯一性,你仍需针对不同服务使用不同的密码本。

脚本化的边界——你该信任谁?

脚本能生成强密码,但无法替代你的安全习惯。再大的熵也敌不过一次钓鱼点击,随机密码本应视为应急工具,而非长期存储方案,若管理超过200个密码,建议仍然迁移到KeePassXC(本地数据库)或Vaultwarden(自托管)等工具。


延伸阅读建议:搜索“OWASP 密码存储备忘单”、“熵计算器”以及“Python secrets模块文档”,本脚本已适配Python 3.6+,无第三方依赖,可直接运行于Linux、macOS及Windows子系统。


(完)

抱歉,评论功能暂时关闭!