def generate_sweetwords(num_sweetwords, known_passwords, pass_weights, real_password, random_word_prob=RANDOM_WORD_PROBABILITY, prepared_seeds=None, tough_nut_prob=TOUGH_NUT_PROBABILITY): sweetwords = [real_password] # initiate the honeywords with the sweetwords num_seeds = mod_count(num_sweetwords) if not prepared_seeds: rockyou_seeds = choose_rockyou(known_passwords, pass_weights, num=num_seeds).tolist() while len(sweetwords) < num_seeds: r = random.random() # generate a new word using 1 of 3 methods if (r < tough_nut_prob): new_word = generate_tough_nut() if r < random_word_prob: new_word = generate_word() else: if prepared_seeds: new_word = prepared_seeds.pop() else: new_word = rockyou_seeds.pop() if new_word not in sweetwords: # add the generated word sweetwords.append(new_word) # sweetwords with sqrt(n)-1 elements+password tweaks = generate_tweaks(num_sweetwords, sweetwords) random.shuffle(tweaks) return tweaks
def generate_sweetwords(num, password): seed_count = mod_count(num) seeds = generate_seeds(seed_count, password) sweetwords = generate_tweaks(num, seeds) random.shuffle(sweetwords) return sweetwords