-
Notifications
You must be signed in to change notification settings - Fork 0
/
password_generator.py
42 lines (35 loc) · 1.78 KB
/
password_generator.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
import string
import secrets
import sys
def get_user_input():
try:
password_length = int(input("Enter the desired password length (minimum 8): "))
if password_length < 8:
raise ValueError("Password length should be at least 8 characters.")
include_digits = input("Include digits? (y/n): ").lower() == 'y'
include_special_chars = input("Include special characters? (y/n): ").lower() == 'y'
custom_chars = input("Enter any additional custom characters to include (leave blank for none): ")
except ValueError as e:
print(e)
sys.exit(1)
return password_length, include_digits, include_special_chars, custom_chars
def generate_password(length, include_digits, include_special_chars, custom_chars):
characters = string.ascii_letters
if include_digits:
characters += string.digits
if include_special_chars:
characters += string.punctuation
characters += custom_chars
password_characters = [secrets.choice(string.ascii_letters)]
password_characters += [secrets.choice(string.digits) if include_digits else '']
password_characters += [secrets.choice(string.punctuation) if include_special_chars else '']
password_characters += [secrets.choice(custom_chars) if custom_chars else '']
password_characters.extend(secrets.choice(characters) for _ in range(length - len(password_characters)))
password = ''.join(password_characters)
return password
def main():
password_length, include_digits, include_special_chars, custom_chars = get_user_input()
password = generate_password(password_length, include_digits, include_special_chars, custom_chars)
print(f"Your generated password is: {password}")
if __name__ == "__main__":
main()