什么是暴力破解? 暴力破解(Brute Force)的意思是攻击者借助计算机的高速计算不停枚举所有可能的用户名和密码,直到尝试出正确的组合,成功登录系统。理论上,只要字典足够大,破解总是会成功的。例如,如果一个网站的密码限定只能输入6个数字,则我们把0-9任意排列组合成6位的数字字符串,总有一个是正确的密码。(现实中密码是数字字母下划线组合,排列组合出的数据太大了,用穷举法暴力破解不现实)。
在python中如何实现排列组合呢?Python的itertools库中提供了方法可以轻松的实现排列组合。
import itertools
第一种permutations方法 排列
#列表元素排列
result = itertools.permutations([1,2,3,4],3)
print(result)
l = list(result)
print(l)
print(len(l))
#运行结果
<itertools.permutations object at 0x00000000028D8BF8>
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]
24
第二种combinations方法 组合
#列表元素组合
result = itertools.combinations([1,2,3,4],3)
print(result)
l = list(result)
print(l)
print(len(l))
#运行结果
<itertools.combinations object at 0x00000000020DB3B8>
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
4
第三种product方法
result = itertools.product("0123456789",repeat=6)
print(result)
l = list(result)
print(l) #小心MemoryError:内存溢出
print(len(l))
#运行结果
<itertools.product object at 0x0000000002932FC0>
[('0', '0','0', '0','0', '0'), ('0','0', '0','0', '0' '1'), ('0','0', '0','0', '0' '2')...] #数据太大了(没死机算幸运了,运行代码请把repeat改成2)
1000000
三种方法中,如果你要做暴力破解请使用第三种方法,因为密码为 888888 的大有人在哦。