怎么用脚本生成密码字典

wen 实用脚本 1

从零到一:用Python脚本高效生成定制化密码字典(附暴力破解防御指南)


目录导读

  1. 为什么你需要自己的密码字典(市售字典的致命缺陷)
  2. 核心逻辑:从组合爆炸到精准打击(字符集与规则引擎)
  3. 实战脚本:三个级别的生成器(基础版/智能变形版/拓扑扩展版)
  4. 性能与并行:一秒生成百万条的秘密(多进程与内存管理)
  5. 安全警示:生成字典的法律边界与防御对策(如何反制此类脚本)
  6. 常见问题FAQ(问答环节)

为什么你需要自己的密码字典

市面上的“rockyou.txt”或“常用弱口令合集”虽大,但针对性极弱,如果目标用户是“某高校教职工”,其密码规律大概率是“姓名拼音+工号+固定符号”,而通用字典只包含“admin123”这类组合,命中率极低。

怎么用脚本生成密码字典

SEO关键词提示密码字典生成原理渗透测试自定义字典,搜索引擎已验证:用户真正需要的是“按规则生成”,而非“下载现成文件”。

核心观点:脚本生成字典的价值在于精确控制规则——你定义“姓”和“生日”的排列组合,脚本负责穷举,最终得出一个只有几千条但命中率极高的迷你字典。


核心逻辑:从组合爆炸到精准打击

密码的构成逃不开三个维度:字符集(大小写、数字、符号)、长度范围结构规则(如首字母大写+尾随数字),脚本的本质是笛卡尔积

一个反直觉的优化点:拒绝全量组合,比如生成8位纯小写,那会有26^8≈2080亿条,毫无意义,正确的做法是设置“模式掩码”:

  • ?l?l?l?d?d 表示“3小写+2数字”。
  • ?u?l?l?l?d?s 表示“大写+2小写+数字+符号”。

这能将空间缩小至亿分之一级别,且精准打击人类习惯。


实战脚本:三个级别的生成器

以下Python脚本均基于itertools库,兼容Python 3.8+。

(1)基础版:固定格式穷举器

import itertools
# 定义字符集
lower = 'abcdefghijklmnopqrstuvwxyz'
digits = '0123456789'
# 生成所有 3小写+2数字 的组合
for combo in itertools.product(lower, repeat=3):
    for num in itertools.product(digits, repeat=2):
        print(''.join(combo) + ''.join(num))

慎用:直接运行会刷屏,建议将print改为写入文件

(2)智能变形版:基于弱密码的词根替换

此脚本针对“admin”进行leet变形(如a->@, i->1),并追加年份与符号:

base_words = ['admin', 'password', 'welcome']
replace_map = {'a': '@', 's': '$', 'i': '1', 'o': '0'}
years = ['2023', '2024']
symbols = ['!', '@', '#']
for word in base_words:
    # 替换
    for old, new in replace_map.items():
        word = word.replace(old, new)
    # 拼接
    for y in years:
        for s in symbols:
            print(f"{word}{y}{s}")

(3)拓扑扩展版:读取个人信息CSV

import csv, itertools
with open('users.csv') as f:
    for row in csv.DictReader(f):
        # 假设列:name(王强), birthday(19900101)
        pinyin = row['name']  # 需自行转换拼音
        bd = row['birthday'][-4:]  # 取后四位 0101
        # 组合
        patterns = [
            pinyin + bd,
            pinyin.capitalize() + bd,
            bd + pinyin
        ]
        for p in patterns:
            print(p)

注意:拼音转换可用pypinyin库,这里仅为演示逻辑。


性能与并行:一秒生成百万条的秘密

瓶颈:硬盘I/O,逐条print到屏幕是灾难级的,正确做法是批量写入缓冲区

buffer = []
for item in generator:
    buffer.append(item + '\n')
    if len(buffer) >= 10000:
        with open('dict.txt', 'a') as f:
            f.writelines(buffer)
        buffer.clear()  # 清空

多进程:使用multiprocessing.Pool,将字符集切片分配给4个进程,速度可提升约3.5倍(受GIL限制,此操作为CPU密集,需用多进程而非多线程)。

from multiprocessing import Pool
def gen_part(charset):
    # 返回生成器的局部结果
    for combo in itertools.product(charset, repeat=4):
        yield ''.join(combo)
with Pool(4) as p:
    # 分块处理
    p.map(gen_part, chunks)

安全警示:法律边界与防御对策

合法性:根据《网络安全法》第二十七条,任何个人和组织不得从事非法侵入他人网络的活动,生成字典仅限用于授权测试自我安全意识评估,若用于攻击真实系统,将面临刑责。

防御对策(如何反制脚本)

  • 强制多因素认证:即使字典命中,没有第二因素也无法登录。
  • 登录限速与锁定:5次失败锁定15分钟(如fail2ban)。
  • 密码复杂度策略:禁止字典中出现“姓名+生日”的连续序列(通过正则检测)。

识别成本:一个100万条的字典文件,若用SHA-256哈希存储,需占用约30MB内存,但用hashcat配合GPU破解,每秒可尝试150亿次,所以密码长度才是硬道理,建议最少15位且无规律。


常见问题FAQ

Q1:为什么我的脚本生成速度极慢? A:大部分情况是终端输出阻塞,请使用文件缓冲写入,并关闭实时打印,避免在循环内重复打开文件句柄。

Q2:如何避免生成重复的密码? A:基础版用set去重,但会损失内存,若需严格去重,建议使用pandasdrop_duplicates,但会增加耗时,通常规则生成时组合唯一,无需额外去重。

Q3:脚本支持GPU加速吗? A:Python层面的纯生成器无法利用GPU,GPU加速只针对猜测验证环节(如Hashcat),生成环节属于CPU逻辑运算,优化空间有限。

Q4:能否生成中文密码字典? A:可以,将字符集string.printable替换为包含Unicode中文的列表,但需注意编码格式(UTF-8),由于中文密码罕见,破解价值低,且组合空间过于巨大,不建议。

Q5:有没有现成的图形化工具? A:有,如Crunch(Linux命令行)和CUPP(基于用户信息的生成脚本),但图形化工具难以个性化定义复杂的变形逻辑,脚本仍是终极武器。


生成字典是“规则工程”而非“暴力堆砌”,掌握脚本逻辑,你不仅能快速创建高度定制化的测试词库,更能深刻理解密码的危害性,请务必在合法授权范围内使用这些代码,并主动加强自身系统的抗字典攻击能力。防御永远比攻击更重要。

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