什么是暴力破解(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"))
防御措施
- 强密码策略
- 至少 8-12 位,包含大小写字母、数字和特殊符号。
- 账号锁定
- 连续输错 5 次,锁定 15 分钟。
- 验证码 / 二次验证(MFA)
- 防止自动化爆破。
- 限制请求速率(Rate Limiting)
- 例如 Nginx/防火墙限制某 IP 每分钟最多 10 次登录请求。
- 监控日志
- 发现可疑 IP,及时封禁。