pypasswordgenerator/generate.py

65 lines
1.8 KiB
Python

import random
from dictionaries import *
options = {
"minimum_length": 21,
"capitalize_first_letter": True,
"leet_it": True,
"add_number_to_end": False,
"add_special_to_end": False,
"dictionary": "eff",
}
def leetspeak_substitutions(string, num_substitutions):
for i in range(num_substitutions):
while True:
index = random.randint(0, len(string)-1)
letter = string[index]
if letter.lower() in leetspeak:
string = string[:index] + leetspeak[letter.lower()] + string[index + 1:]
break
return string
def add_random_number(string):
rand_num = random.randint(0, 9)
return string + str(rand_num)
def add_random_special_char(string):
special_chars = ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"]
rand_index = random.randint(0, len(special_chars) - 1)
return string + special_chars[rand_index]
password = ""
# ENTRY
if options["dictionary"] == "eff":
with open("eff_large_wordlist_dict.txt") as f:
wordlist = [x[:-1] for x in f.readlines()]
else:
with open("diceware.txt") as f:
wordlist = [x[:-1] for x in f.readlines()]
while len(password) <= options["minimum_length"]:
index = random.randint(0, len(wordlist))
chosen_word = wordlist[index]
if(options["capitalize_first_letter"] == True):
chosen_word = chosen_word.capitalize()
password += chosen_word
print("Standard Password:\t" + password)
if options["leet_it"]:
password = leetspeak_substitutions(password, 3)
if options["add_number_to_end"]:
password = add_random_number(password)
if options["add_special_to_end"]:
password = add_random_special_char(password)
# Print the generated password
print("Funky Password: \t"+password)