-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrandom_password.py
More file actions
51 lines (39 loc) · 1.56 KB
/
random_password.py
File metadata and controls
51 lines (39 loc) · 1.56 KB
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
# Generates a random password of desired length with special characters,
# letters and numbers. Ensures there's at least one special character,
# one lowercase, one uppercase and one number in the password.
# Author: Samir Khakimov
import random
import argparse
import os
import string
# List of numbers 0 - 9
numbers = map(str, range(0, 10))
# List of all lowercase characters
lower = list(string.lowercase)
# List of all uppercase characters
upper = list(string.uppercase)
# List of special characters
specials = ['!', '@', '#', '$', '%', '&', '*']
def generate(pswd_length):
pswd_set = set()
random.seed(os.urandom(random.randint(1, 1000)))
# Check there's at least one number, lower, upper and special
while not (pswd_set & set(numbers) and pswd_set & set(lower) and
pswd_set & set(upper) and pswd_set & set(specials)):
pswd_list = []
for i in xrange(pswd_length):
pswd_char = random.choice(numbers+lower+specials+upper)
pswd_list.append(pswd_char)
pswd_set = set(pswd_list)
random.shuffle(pswd_list)
return ''.join(pswd_list)
def main():
parser = argparse.ArgumentParser(description='Password Generator',
usage='python rand_password.py -l length')
parser.add_argument('-l', '--length',
help='provide desired password length', type=int,
required=True)
args = parser.parse_args()
print generate(args.length)
if __name__ == "__main__":
main()