python网络安全 暴力破解与字典攻击

什么是暴力破解(Brute Force Attack)?

  • 定义:攻击者通过不断尝试所有可能的密码组合,直到找到正确密码。
  • 特点:一定能成功,但耗时长,效率低。
  • 适用场景:密码很短,或者加密算法/系统限制不严时。

什么是字典攻击(Dictionary Attack)?

  • 定义:攻击者使用一个“常见密码字典”去尝试登录,而不是测试所有组合。
  • 特点:比暴力破解高效,因为很多人用弱密码。
  • 常见字典示例

    123456
    password
    qwerty
    admin
    iloveyou
    12345678
    

暴力破解 vs 字典攻击

方法 原理 优点 缺点
暴力破解 遍历所有可能密码 一定能成功 时间消耗巨大
字典攻击 用常见密码列表尝试 快速、高效 只能爆破弱密码

Python 简易版「密码爆破器」

import itertools

def brute_force(password, max_length=4):
    chars = "abcdefghijklmnopqrstuvwxyz0123456789"
    for length in range(1, max_length + 1):
        for attempt in itertools.product(chars, repeat=length):
            guess = "".join(attempt)
            if guess == password:
                return guess
    return None

print("破解结果:", brute_force("ab1", max_length=3))

原理:枚举所有可能字符组合,逐一匹配。

字典攻击 Python 示例

def dictionary_attack(password, dictionary_file):
    with open(dictionary_file, "r") as f:
        for line in f:
            guess = line.strip()
            if guess == password:
                return guess
    return None

# 需要一个字典文件 common.txt
print("破解结果:", dictionary_attack("123456", "common.txt"))

防御措施

  1. 强密码策略
    • 至少 8-12 位,包含大小写字母、数字和特殊符号。
  2. 账号锁定
    • 连续输错 5 次,锁定 15 分钟。
  3. 验证码 / 二次验证(MFA)
    • 防止自动化爆破。
  4. 限制请求速率(Rate Limiting)
    • 例如 Nginx/防火墙限制某 IP 每分钟最多 10 次登录请求。
  5. 监控日志
    • 发现可疑 IP,及时封禁。