如何生成符合指定规则的所有密码组合以找回遗失密码
组合数计算错误修正
你之前的组合规模计算逻辑存在本质错误:
- nCr是无顺序、不重复选元素的组合公式,完全不适用于密码计算场景——密码的字符顺序直接决定正确性,且允许同一字符重复出现。
- 正确的组合规模计算:
- 前4位每一位独立可选52种大小写英文字母,总共有
52^4 = 7311616种排列 - 后4位每一位独立可选10种数字,总共有
10^4 = 10000种排列 - 全量符合规则的密码总计7311616 * 10000 = 73116160000(731亿+)种,和你之前计算的结果量级差超过1200倍。
- 前4位每一位独立可选52种大小写英文字母,总共有
提示:全量爆破731亿组密码的时间、存储成本极高,建议优先回忆线索缩小范围(比如前四位是否是名字/常用单词缩写、是否固定大小写格式、后四位是否是生日/手机号尾号/常用数字组合等),再开展恢复操作,效率会提升几个数量级。
具体实现方案
自定义场景Python脚本
如果是需要对接自定义校验逻辑(比如私有系统登录、自定义哈希校验等),可以直接用Python标准库实现,无需安装第三方依赖,注意不要全量把密码写入磁盘(全量密码存储需要超过500G磁盘空间),推荐边生成边校验:
import itertools import string # 加载字符集 letter_set = string.ascii_letters # 覆盖所有大小写英文字母a-z、A-Z digit_set = string.digits # 覆盖所有数字0-9 # 逐组生成校验 for prefix_chars in itertools.product(letter_set, repeat=4): prefix = ''.join(prefix_chars) for suffix_chars in itertools.product(digit_set, repeat=4): current_pwd = prefix + ''.join(suffix_chars) # 在此处插入你的校验逻辑,比如匹配哈希值、发起登录请求等 # 调试时可临时打开打印,全量打印会直接导致程序卡死 # print(current_pwd)
通用加密场景现成工具
如果是压缩包、Office文档、操作系统账号这类常见加密场景的密码恢复,不需要自己写脚本,直接用专业密码恢复工具的掩码攻击功能即可:
- 配置攻击模式为掩码攻击
- 前4位掩码设置为匹配所有大小写英文字母
- 后4位掩码设置为匹配所有数字
这类工具自带GPU硬件加速,同硬件下的跑速比纯Python脚本高几十到上百倍,能大幅缩短恢复时间。
内容的提问来源于stack exchange,提问作者Yskimo
相关产品推荐
相关产品推荐

