使用Python生成随机密码的示例分享
生成随机密码这件事情用python来干确实相当的方便,优美的string方法加上choice简直是绝配
make_password.py
###简单几行代码执行即可生成记不住的字符串### $pythonmake_passwd.py DLrw9EiT Qs4Wm84q RQwl4L2L u9g0LgwW jHPtYdyU ...
$pythonmake_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-SA2014 #------------------------------------------------------------------------------- fromrandomimportchoice importstring defMakepass(length=8,chars=string.letters+string.digits): return''.join([choice(chars)foriinrange(length)]) if__name__=='__main__': foriinrange(10): printMakepass() ##下例基本上就是这个小脚本的所有工作核心了,使用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-SA2014 #------------------------------------------------------------------------------- fromrandomimportchoice importstring defMakepass(length=8,chars=string.letters+string.digits): return''.join([choice(chars)foriinrange(length)]) if__name__=='__main__': foriinrange(10): printMakepass() ##下例基本上就是这个小脚本的所有工作核心了,使用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做默认密码,我当时公司就真有员工把这样的密码背下来了,现在想想真心是厉害~~~)。
##这样看起来是比上面的好记一点了吧,但需要提供一个字典文件## $pythonmake_dictpass.py181 ipythosd $pythonmake_dictpass.py nahontchen chenyibfeo ipythoniue coreostche ... $pythonmake_dictpass.py181 ipythosd $pythonmake_dictpass.py nahontchen chenyibfeo ipythoniue coreostche ...
代码如下
#!/usr/bin/python #--coding:utf-8--# #------------------------------------------------------------------------------- #Name:make_dictpass # #Author:LiuSha # #Created:28/12/2014 #Copyright:(c)WDZJ-SA2014 #------------------------------------------------------------------------------- importrandom importstring classpasswd(): data=open('./word.txt').read().lower() defrenew(self,n,maxmem=3): self.chars=[] foriinrange(n): randspot=random.randrange(len(self.data)) self.data=self.data[randspot:]+self.data[:randspot] where=-1 locate=''.join(self.chars[-maxmem:]) whilewhere<0andlocate:where=self.data.find(locate)locate=locate[1:]c=self.data[where+len(locate)+1]ifnotc.islower():c=random.choice(string.lowercase)self.chars.append(c)def__str__(self):return''.join(self.chars)if__name__=='__main__':importsys##如果带参数的话可以定义生成密码的次数,长度,追溯记录##iflen(sys.argv)>1: dopass=int(sys.argv[1]) else: dopass=8 iflen(sys.argv)>2: length=int(sys.argv[2]) else: length=10 iflen(sys.argv)>3: memory=int(sys.argv[3]) else: memory=3 onepass=passwd() foriinrange(dopass): onepass.renew(length,memory) printonepass
##字典文件(可以是各种单词的组合)## $catword.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-SA2014 #------------------------------------------------------------------------------- importrandom importstring classpasswd(): data=open('./word.txt').read().lower() defrenew(self,n,maxmem=3): self.chars=[] foriinrange(n): randspot=random.randrange(len(self.data)) self.data=self.data[randspot:]+self.data[:randspot] where=-1 locate=''.join(self.chars[-maxmem:]) whilewhere<0andlocate:where=self.data.find(locate)locate=locate[1:]c=self.data[where+len(locate)+1]ifnotc.islower():c=random.choice(string.lowercase)self.chars.append(c)def__str__(self):return''.join(self.chars)if__name__=='__main__':importsys##如果带参数的话可以定义生成密码的次数,长度,追溯记录##iflen(sys.argv)>1: dopass=int(sys.argv[1]) else: dopass=8 iflen(sys.argv)>2: length=int(sys.argv[2]) else: length=10 iflen(sys.argv)>3: memory=int(sys.argv[3]) else: memory=3 onepass=passwd() foriinrange(dopass): onepass.renew(length,memory) printonepass
##字典文件(可以是各种单词的组合)## $catword.txt chenyi itchenyi python ipython coreos coreos.me ipython.me