本文告诉你什么是黑客字典,如何用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位随机纯数字的所有组合。