-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPassGenerator.py
55 lines (47 loc) · 1.46 KB
/
PassGenerator.py
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
import itertools
import math
"""
@owner : PJW
@brief : to make password generator
@date : 2016.05.13
"""
class PassGenerator:
"""
@writer : JSH
@obj: class constructor
@param : target of chars written by user, target of password length
@return : None
"""
def __init__(self, target_chars, target_length):
self.length = target_length
self.target_chars = target_chars
self.total_num_case = self._total_case(target_chars, target_length)
self.pass_generator = iter(self.make_generator(target_length, target_chars))
self.offset = 0
"""
@writer : JSH
@obj : to make password generator
@param : target of length, target of characters
@return : yield each password
"""
def make_generator(self, target_length, target_chars):
for length_pass in xrange(1, target_length+1):
attempt = itertools.product(target_chars, repeat=length_pass)
for att in attempt:
brute = "".join(att)
self.offset += 1
yield brute
"""
@writer : JSH
@obj : to make total number of cases
@param : length of chars, length of password
@return : total number of cases
"""
def _total_case(self, len_char, tar_len):
len_char = len(len_char)
return (len_char ** (tar_len + 1) - len_char) / (len_char - 1)
def test():
test = PassGenerator('tes' , 3)
print test.target_chars, test.length, test.total_num_case, [i for i in test.pass_generator], test.offset
if __name__ == "__main__":
test()