python实现密码字典生成器

python.png

人生苦短,我用Python!

Python是一门非常简洁、强大的编程语言,可以用来解决生活工作中的很多问题。现在Python也越来越受欢迎。在本篇博客中将聊一聊如何使用Python生成密码字典。

前提要求

  1. Python 3.6 (对于python2.7应该同样有效,未测试)
  2. PyCharm编辑器或者任一编辑器(vi、sublime均可)

代码

先上完整代码,后面再一一解析。

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/python
# coding: utf-8
"""
@ author: Kylin
@ function: 密码字典生成器
@ date: 2017/6/22
"""
import os
import sys
import itertools as itr
words = "abcdefghijklmnopqrstuvwxyz1234567890"
dict_file = "dict.txt"
class DictorGenerate():
def __init__(self, minLength, maxLength):
if maxLength > minLength:
self.minLength = minLength
self.maxLength = maxLength
else:
self.minLength = maxLength
self.maxLength = minLength
def generate(self):
# 如果文件存在则删除
if os.path.isfile(dict_file):
os.remove(dict_file)
dic = open(dict_file, "a", encoding='utf-8')
for i in range(self.minLength, self.maxLength + 1):
r = itr.product(words, repeat=i)
for i in r:
dic.write("%s\n" % "".join(i))
dic.close()
if __name__ == "__main__":
print("开始生成密码字典......")
param_len = len(sys.argv[1:])
param = str(sys.argv[1:])
param = param.replace("'", "").replace("[", "").replace("]", "")
params = param.split(",")
try:
if param_len == 2:
min = int(params[0])
max = int(params[1])
elif param_len == 0:
min = 3
max = 4
else:
print("\nError:\n\n 仅能输入两个数字,例如:\n\n python DictGenerate.py 3 6")
sys.exit(0)
except ValueError as e:
print("\nError:\n\n 参数只能输入数字,例如:\n\n python DictGenerate.py 3 6")
sys.exit(0)
dg = DictorGenerate(min, max)
dg.generate()
print("生成密码字典成功......")

参数words是你生成密码所需要的字符,我这里因为个人需要所以并不完整,没有加入大写字母以及特殊字符,你可以根据自己的需要去添加。

参数dict_file是最终生成出来的密码字典文件。

DictorGenerate()的作用就是生成字典了。先来分析这个类:

1
2
3
4
5
6
7
def __init__(self, minLength, maxLength):
if maxLength > minLength:
self.minLength = minLength
self.maxLength = maxLength
else:
self.minLength = maxLength
self.maxLength = minLength

__init__方法是初始化方法,传入两个参数,分别是minLength(最小长度)maxLength(最大长度),在这里初始化生成的密码的长度范围。

生成密码字典

主要的密码生成函数是generate(self),主要是使用了itertools.product()函数

源代码下载

源代码下载:DictGenerate.py