使用Python生成随机密码的示例分享

984次阅读  |  发布于5年以前

生成随机密码这件事情用python来干确实相当的方便,优美的string方法加上choice简直是绝配
make_password.py


    ###简单几行代码执行即可生成记不住的字符串###

    $ python make_passwd.py
     DLrw9EiT
     Qs4Wm84q
     RQwl4L2L
     u9g0LgwW
     jHPtYdyU
     ...


    $ python make_passwd.py
     DLrw9EiT
     Qs4Wm84q
     RQwl4L2L
     u9g0LgwW
     jHPtYdyU
     ...

代码如下――注释比代码长


    #!/usr/bin/python
     #--coding:utf-8--#
     #-------------------------------------------------------------------------------
     # Name: make_passwd
     #
     # Author: LiuSha
     #
     # Created: 28/12/2014
     # Copyright: (c) WDZJ-SA 2014
     #-------------------------------------------------------------------------------
     from random import choice
     import string
    def Makepass(length=8, chars=string.letters+string.digits):
     return ''.join([choice(chars) for i in range(length)])
    if __name__ == '__main__':
     for i in range(10):
     print Makepass()
    ##下例基本上就是这个小脚本的所有工作核心了,使用random模块的choice方法取string模块生成的字符串##
     >>> string.letters
     'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
     >>> string.digits
     '0123456789'
    >>> choice(string.digits)
     '4'
     >>> choice(string.letters)
     'T'
    ##有关生成器可参考:http://www.ipython.me/python/python-generator.html##

    #!/usr/bin/python
     #--coding:utf-8--#
     #-------------------------------------------------------------------------------
     # Name: make_passwd
     #
     # Author: LiuSha
     #
     # Created: 28/12/2014
     # Copyright: (c) WDZJ-SA 2014
     #-------------------------------------------------------------------------------
     from random import choice
     import string
    def Makepass(length=8, chars=string.letters+string.digits):
     return ''.join([choice(chars) for i in range(length)])
    if __name__ == '__main__':
     for i in range(10):
     print Makepass()
    ##下例基本上就是这个小脚本的所有工作核心了,使用random模块的choice方法取string模块生成的字符串##
     >>> string.letters
     'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
     >>> string.digits
     '0123456789'
    >>> choice(string.digits)
     '4'
     >>> choice(string.letters)
     'T'
    ##有关生成器可参考:http://www.ipython.me/python/python-generator.html##

生成一些人似乎能好记一些的密码(Qs4Wm84q这种密码似乎除了复制粘贴没有别的选择,话说前年我使用shell生成的类似的密码给ldap做默认密码,我当时公司就真有员工把这样的密码背下来了,现在想想真心是厉害~~~)。


    ##这样看起来是比上面的好记一点了吧,但需要提供一个字典文件##

    $ python make_dictpass.py 1 8 1
     ipythosd
    $ python make_dictpass.py
     nahontchen
     chenyibfeo
     ipythoniue
     coreostche
     ...

    $ python make_dictpass.py 1 8 1
     ipythosd
    $ python make_dictpass.py
     nahontchen
     chenyibfeo
     ipythoniue
     coreostche
     ...

代码如下


    #!/usr/bin/python
     #--coding:utf-8--#
     #-------------------------------------------------------------------------------
     # Name: make_dictpass
     #
     # Author: LiuSha
     #
     # Created: 28/12/2014
     # Copyright: (c) WDZJ-SA 2014
     #-------------------------------------------------------------------------------
     import random
     import string
    class passwd():
     data = open('./word.txt').read().lower()
     def renew(self, n, maxmem=3):
     self.chars = []
     for i in range(n):
     randspot = random.randrange(len(self.data))
     self.data = self.data[randspot:] + self.data[:randspot]
     where = -1
     locate = ''.join(self.chars[-maxmem:])
     while where < 0 and locate: where = self.data.find(locate) locate = locate[1:] c = self.data[where+len(locate)+1] if not c.islower(): c = random.choice(string.lowercase) self.chars.append(c) def __str__(self): return ''.join(self.chars) if __name__ == '__main__': import sys ##如果带参数的话可以定义生成密码的次数,长度,追溯记录## if len(sys.argv) > 1:
     dopass = int(sys.argv[1])
     else:
     dopass = 8
     if len(sys.argv) > 2:
     length = int(sys.argv[2])
     else:
     length = 10
     if len(sys.argv) > 3:
     memory = int(sys.argv[3])
     else:
     memory = 3
     onepass = passwd()
     for i in range(dopass):
     onepass.renew(length,memory)
     print onepass

    ##字典文件(可以是各种单词的组合)##
     $ cat word.txt
     chenyi
     itchenyi
     python
     ipython
     coreos
     coreos.me
     ipython.me


    #!/usr/bin/python
     #--coding:utf-8--#
     #-------------------------------------------------------------------------------
     # Name: make_dictpass
     #
     # Author: LiuSha
     #
     # Created: 28/12/2014
     # Copyright: (c) WDZJ-SA 2014
     #-------------------------------------------------------------------------------
     import random
     import string
    class passwd():
     data = open('./word.txt').read().lower()
     def renew(self, n, maxmem=3):
     self.chars = []
     for i in range(n):
     randspot = random.randrange(len(self.data))
     self.data = self.data[randspot:] + self.data[:randspot]
     where = -1
     locate = ''.join(self.chars[-maxmem:])
     while where < 0 and locate: where = self.data.find(locate) locate = locate[1:] c = self.data[where+len(locate)+1] if not c.islower(): c = random.choice(string.lowercase) self.chars.append(c) def __str__(self): return ''.join(self.chars) if __name__ == '__main__': import sys ##如果带参数的话可以定义生成密码的次数,长度,追溯记录## if len(sys.argv) > 1:
     dopass = int(sys.argv[1])
     else:
     dopass = 8
     if len(sys.argv) > 2:
     length = int(sys.argv[2])
     else:
     length = 10
     if len(sys.argv) > 3:
     memory = int(sys.argv[3])
     else:
     memory = 3
     onepass = passwd()
     for i in range(dopass):
     onepass.renew(length,memory)
     print onepass



    ##字典文件(可以是各种单词的组合)##
     $ cat word.txt
     chenyi
     itchenyi
     python
     ipython
     coreos
     coreos.me
     ipython.me

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8