本文告诉你什么是黑客字典,如何用python轻松的生成黑客常用的密码字典。
0x00 前提
黑客字典,其实就是一些常用的字符集合,往往包含了大量的刻意生成的字符串组合,用来暴力破解某些密码。我们可以用python,只书写几行代码,就可以迭代生成大量我们需要的字符串组合。
首先简单的介绍下用到的2个库:string 和 itertools。
- 介绍 string 模块中几个有用的全局变量:
- string.letters:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- string.printable:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50- string.lowercase: `abcdefghijklmnopqrstuvwxyz`
- string.uppercase: `ABCDEFGHIJKLMNOPQRSTUVWXYZ`
* **itertools** 是python的循环器库。循环器是对象的容器,包含有多个对象。`itertools.product()` 的结果为笛卡尔积,相当于一个嵌套循环。`itertools.chain()`将多个循环器结合成单个循环器。[更多关于 itertools](https://docs.python.org/2/library/itertools.html)
### 0x01 代码
```python
# !/usr/bin/env python
# coding:utf-8
import sys
import string
import itertools
def get_strings():
chars = string.printable[:10]
strings = []
for i in xrange(min, max + 1):
strings.append((itertools.product(chars, repeat=i),))
return itertools.chain(*strings)
def make_dict(file, list_str):
f = open(file, 'a')
for x in list_str:
print x
for y in x:
f.write("".join(y))
f.write('\n')
f.close()
print 'Done'
if __name__ == '__main__':
if len(sys.argv) == 4:
try:
min = int(sys.argv[1])
max = int(sys.argv[2])
except:
print "wrong"
sys.exit(0)
if min <= max:
list_str = get_strings()
file = str(sys.argv[3])
make_dict(file, list_str)
sys.exit(0)
else:
print "missing some argvs"
- string.letters:
0x02 结果
这里我们的脚本文件为dict.py
,后面的参数分别为密码的最小长度、密码的最大长度以及保存的字典文件名。上面的例子运行成功后会在脚本文件同级目录下生成一个dict.txt
的字典文件,其中包含6位随机纯数字的所有组合。