I have the following code here
It's a password generator that lets you choose a completely random password with a certain length of a custom password with different amounts of character types.
I want feedback of the general readability, style, and security (as it's a password generator), and if you would do anything differently.
The code:
# Imports libraries import secrets import string # Creates list of every possible character for the "general" option fulllist = string.ascii_lowercase + string.ascii_uppercase + string.digits + string.punctuation # Asks user what option they want generalorcustom = input("General (g) or custom (c) password: ") # Randomly grabs a character from the 'fulllist' as many times as specified def general(): return ''.join(secrets.choice(fulllist) for i in range(int(length))) def custom(): # Inputs how many of each character user wants lowernum = input("Lowwer case character count: ") uppernum = input("Upper case character count: ") digitnum = input("Digit count: ") specnum = input("Special character count: ") # Creates list, then randomly adds each characters of each type to list for specified amount temp_list = [] temp_list.extend(list(secrets.choice(string.ascii_lowercase) for i in range(int(lowernum)))) temp_list.extend(list(secrets.choice(string.ascii_uppercase) for i in range(int(uppernum)))) temp_list.extend(list(secrets.choice(string.digits) for i in range(int(digitnum)))) temp_list.extend(list(secrets.choice(string.punctuation) for i in range(int(specnum)))) # Creates final string, and randomly adds contents of temp_list to final string password = '' rangevar = list(range(len(temp_list))) while len(rangevar) > 0: picked_item = secrets.choice(rangevar) password += temp_list[picked_item] rangevar.remove(picked_item) return password # Checks and executes function as user requested if generalorcustom.lower() == "general" or generalorcustom.lower() == "g": length = input("Password length: ") print(general()) elif generalorcustom.lower() == "custom" or generalorcustom.lower() == "c": print(custom()) else: print('Error, invalid input')
26**13 > 62**10
). Forcing users to use any specific mix of characters encourages shorter passwords, because they're easier to remember or type.\$\endgroup\$