High quality, simple random password generator

前端 未结 27 2532
渐次进展
渐次进展 2020-12-22 17:06

I\'m interested in creating a very simple, high (cryptographic) quality random password generator. Is there a better way to do this?

import os, random, strin         


        
27条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-22 17:21

    import random
    
    
    r = random.SystemRandom()
    
    
    def generate_password(words, top=2000, k=4, numbers=None, characters=None,
                          first_upper=True):
        """Return a random password based on a sorted word list."""
        elements = r.sample(words[:top], k)
    
        if numbers:
            elements.insert(r.randint(1, len(elements)), r.choice(numbers))
        if characters:
            elements.insert(r.randint(1, len(elements)), r.choice(characters))
        if first_upper:
            elements[0] = elements[0].title()
    
        return ''.join(elements)
    
    
    if __name__ == '__main__':
        with open('./google-10000-english-usa.txt') as f:
            words = [w.strip() for w in f]
        print(generate_password(words, numbers='0123456789', characters='!@#$%'))
    
    • Generates passwords that you can remember
    • Uses os.urandom()
    • Handles real-world rules like adding numbers, uppercase, characters.

    Sure it can be improved, but this is what I use.

提交回复
热议问题