基于离散组件生成密码恢复用wordlist的方法咨询
基于离散组件生成密码恢复用wordlist的方法咨询
你这种需求其实很典型——已知密码的所有组成单元,只需要生成它们的全排列组合,同时保证符号!不会嵌入到单词中间。其实只要把每个组件当作不可拆分的独立单元来处理,就能轻松解决这个问题,我来给你拆解一下具体方法,包括你提到的Crunch工具的正确用法:
关于Crunch的-p参数
你之前没搞懂-p很正常,这个参数的作用就是生成给定元素的全排列,它会完全忽略你设置的最小/最大长度参数,直接输出所有元素的排列组合,而且每个元素都会被当作完整的整体处理,绝对不会拆分(自然也就不会出现!插在单词中间的情况)。
针对你的例子,组件是1964、red、Ford、Mustang、!,正确的Crunch命令应该是:
crunch 1 1 -p 1964 red Ford Mustang ! > password_list.txt
这里的1 1只是占位用的(Crunch要求必须填长度参数),-p会覆盖这个设置,最终生成所有5个组件的全排列,每个排列就是把组件直接拼接成一个完整的密码。
进阶:限制!只在首尾
如果你还想进一步限制!只能出现在密码的开头或结尾(很多密码会有这种习惯),可以用shell命令配合Crunch来实现:
# 先生成不带!的4个组件的全排列 crunch 1 1 -p 1964 red Ford Mustang | while read line; do echo "$line!" >> password_list.txt # 在结尾加! echo "!$line" >> password_list.txt # 在开头加! done
这样生成的wordlist里,!只会出现在每个密码的首尾,完全符合你的要求。
备选方案:用Python自定义生成
要是你觉得Crunch的灵活性不够,也可以用几行Python代码自己生成,逻辑更直观:
import itertools # 定义你的密码组件列表 components = ["1964", "red", "Ford", "Mustang", "!"] # 生成所有排列并写入文件 with open("password_list.txt", "w") as output_file: for combo in itertools.permutations(components): output_file.write(''.join(combo) + '\n')
这个脚本会生成所有组件的全排列,每个排列直接拼接成一行写入文件。如果你需要额外的过滤规则(比如排除某些特定排列),也能很方便地添加判断逻辑。
总的来说,核心就是把每个密码组成部分当作不可拆分的原子单元,然后生成它们的排列组合,不管用Crunch还是自定义脚本,都能高效实现你的需求。
备注:内容来源于stack exchange,提问作者Thystra
相关产品推荐
相关产品推荐

