Python 创建黑客字典
黑客字典,其实就是一些常用的字符集合,往往包含了大量的刻意生成的字符串组合,用来暴力破解某些密码。我们可以用python,只书写几行代码,就可以迭代生成大量我们需要的字符串组合。
前提
黑客字典,其实就是一些常用的字符集合,往往包含了大量的刻意生成的字符串组合,用来暴力破解某些密码。我们可以用python,只书写几行代码,就可以迭代生成大量我们需要的字符串组合。
首先简单的介绍下用到的2个库:string 和 itertools。
-
介绍 string 模块中几个有用的全局变量:
- string.letters:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- string.printable:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c
- string.lowercase:
abcdefghijklmnopqrstuvwxyz
- string.uppercase:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
- string.letters:
-
itertools 是python的循环器库。循环器是对象的容器,包含有多个对象。
itertools.product()
的结果为笛卡尔积,相当于一个嵌套循环。itertools.chain()
将多个循环器结合成单个循环器。更多关于 itertools
代码
# !/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"
结果
这里我们的脚本文件为dict.py
,后面的参数分别为密码的最小长度、密码的最大长度以及保存的字典文件名。上面的例子运行成功后会在脚本文件同级目录下生成一个dict.txt
的字典文件,其中包含6位随机纯数字的所有组合。