特别感谢 DavidAngelos:
▶️ 每一步添加进度条以跟踪执行。
▶️ 新增选项:
-i / --inorder):仅按原始顺序连接关键词(例如 foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz)。-c / --combinations):生成每个子集的所有排列(例如 foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …, bazbarfoo)。--sep <string>):连接单词时,在此字符串之间插入分隔符(默认无分隔符)。--max-combine <N>):限制最多连接的原始关键词数量(默认:2)。--minlen/--maxlen <N>):仅保留符合长度要求的单词。Psudohash 是一个密码列表生成器,用于暴力破解和哈希破解。它模拟人类常用的密码创建模式,例如用符号或数字替换单词中的字母(leet)、使用字符大小写变体、在主口令前后添加常见填充等。它基于关键词且高度可定制。🎥 -> 视频演示
系统管理员和其他员工经常使用公司名称的变体来设置密码(例如 Am@z0n_2022)。这在网络设备(Wi-Fi 接入点、交换机、路由器等)、应用程序甚至域账户中很常见。使用最基本选项,psudohash 可以根据常见字符替换模式(可自定义)、大小写变体、常用填充字符串等,生成一个或多个关键词的所有可能变体的单词列表。请看以下示例:

脚本实现了以下字符替换方案。你可以通过编辑 psudohash.py 中的 transformations 列表并遵循以下数据结构(默认)来添加/修改字符替换映射:
transformations = [
{'a' : ['@', '4']},
{'b' : '8'},
{'e' : '3'},
{'g' : ['9', '6']},
{'i' : ['1', '!']},
{'o' : '0'},
{'s' : ['$', '5']},
{'t' : '7'}
]
在设置密码时,我认为人们通常会在主口令前后添加字符序列以使其“更强”。例如,某人可能设置密码“dragon”并在末尾添加“!!!”或“!@#”,得到“dragon!!!”、“dragon!@#”等。Psudohash 从 common_padding_values.txt 中读取这些值,并通过将其附加在每个生成的关键词变体的前面(-cpb)或后面(-cpa)来使用它们。你可以根据需要修改该文件。
将年份值附加到变体关键词时,psudohash 会使用各种分隔符。默认使用以下分隔符,你可以通过编辑 year_seperators 列表来修改:
year_seperators = ['', '_', '-', '@']
例如,如果给定关键词是“amazon”并使用了选项 -y 2023,则输出将包含“amazon2023”、“amazon_2023”、“amazon-2023”、“amazon@2023”、“amazon23”、“amazon_23”、“amazon-23”、“amazon@23”。
首先安装 Python 3.x 和 tqdm:
pip3 install tqdm
然后克隆仓库并使脚本可执行:
git clone https://github.com/t3l3machus/psudohash.git
cd ./psudohash
chmod +x psudohash.py
./psudohash.py [-h] -w WORDS [-i] [-c] [--sep SEP] [--max-combine N] [-an LEVEL] [-nl LIMIT] [-y YEARS] [-ap VALUES] [-cpb] [-cpa] [-cpo] [-o FILENAME] [-q]
帮助对话框 [ -h, --help ] 包含用法详情和示例。
-w, --words <kw1,kw2,…>
以逗号分隔的原始关键词(必需)。
-i, --inorder
按给定顺序连接最多 --max-combine 个关键词(例如 foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz)。
-c, --combinations
生成每个子集的所有排列(最多 --max-combine 个)(例如 foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …)。
--max-combine <N>(默认:2)
连接成一个基本字符串的最大原始关键词数量。
--sep <string>
连接单词时(-i 或 ),在令牌之间放置此字符串。默认为空字符串。
无多词(仅单例)
./psudohash.py -w foo,bar,baz -cpa
# → foo, bar, baz
顺序连接(-i,默认最多 2 个词)
./psudohash.py -w foo,bar,baz -i
# → foo, bar, baz, foobar, foobaz, barbaz
全排列组合(-c,默认最多 2 个词)
./psudohash.py -w foo,bar,baz -c
# → foo, bar, baz, foobar, foobaz, barfoo, barbaz, bazfoo, bazbar
更改连接词之间的分隔符
./psudohash.py -w foo,bar,baz -i --sep "_"
# → foo, bar, baz, foo_bar, foo_baz, bar_baz
长度过滤(--minlen/--maxlen)
./psudohash.py -w apple,banana -i --minlen 10
# 警告:由于长度过滤器,无法确定精确大小。
# 最终输出示例可能包括“applebanana”(11 个字符)、“bananaapple”(11 个字符)。
最多组合 3 个词(而不是默认的 2 个)
--years 和 --append-numbering,且 --numbering-limit ≥ 任何年份输入的后两位数字时,很可能会产生重复单词,因为工具实现的变异模式。--minlen 或 --maxlen 时,脚本无法预先计算确切单词数量;你会看到“无法确定精确大小”的警告,并且将在没有此过滤器的情况下计算大小,最终大小会更小。对于个人而言,我想我们都或多或少使用对我们有意义的词的变体来设置密码,例如我们的名字、妻子/孩子/宠物/乐队名字,在末尾加上出生年份或一个超级安全的填充如“!@#”。那么,你猜怎么着?

我正在收集关于常用密码创建模式的信息,以增强工具的能力。
-c--minlen <N>
丢弃任何长度小于 N 个字符的最终密码。
--maxlen <N>
丢弃任何长度大于 N 个字符的最终密码。
-an, --append-numbering <LEVEL>
将带前导零(填充至 <LEVEL> 位)的数字后缀附加到每个单词变体。
-nl, --numbering-limit <LIMIT>
附加数字时计数的最大值(默认:50)。
-y, --years <years>
将一年或多年附加到每个变体(例如 1990-2000 或 2022,2023)。
-ap, --append-padding <vals>
附加自定义填充值(逗号分隔)。必须与 -cpb 或 -cpa 一起使用。
-cpb, --common-paddings-before
在每个变体之前添加来自 common_padding_values.txt 的值。
-cpa, --common-paddings-after
在每个变体之后添加来自 common_padding_values.txt 的值。
-cpo, --custom-paddings-only
仅使用用户提供的填充(不使用默认值)。必须与 -ap 一起使用。
-o, --output <file>
将结果写入 <file>(默认:output.txt)。
-q, --quiet
启动时隐藏 ASCII 艺术横幅。