用python写了一个随机密码生成器

tianxicool 2010-12-02 03:02:53
看到别人写了一个密码生成器比较简陋,于是自己就给改进了一下。确保包含了数字和大小写字母,而且都是随机出现。小弟正在学习中,欢迎拍砖

import string,random

length=8
seedlower=string.lowercase
seeddigit=string.digits
seedupper=string.uppercase
pwd=pwdd=pwdl=pwdu=''

countl=random.randrange(1,length-1)
countu=random.randrange(1,length-countl)
countd=(length-countl-countu)

#生成随机的字符
for l in random.sample(seedlower,countl):
pwdl+=l
for u in random.sample(seedupper,countu):
pwdu+=u
for d in random.sample(seeddigit,countd):
pwdd+=d

#在随机位置出现随机的字符
seed=pwdl+pwdu+pwdd
shuffler=random.sample(seed,len(seed))
pwd="".join(shuffler)
print pwd
...全文
824 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyue4 2010-12-05
  • 打赏
  • 举报
回复
一般生成验证码之类的随即序列会用到的,写的不错。
infofox 2010-12-03
  • 打赏
  • 举报
回复
有用~ 只是没到用的时候
samgell 2010-12-02
  • 打赏
  • 举报
回复
感觉好像没什么实际作用!
tim_spac 2010-12-02
  • 打赏
  • 举报
回复
with doc
# Encoding: GBK

import random

maybe = '0123456789'\
'abcdefghijklmnopqrstuvwxyz'\
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\
'~!@#$%^&*()_+'

maybesize = len(maybe)
_D, _L, _U, _S = 1, 2, 4, 8
_FULL = _D |_L |_U |_S
_DLU_ = _D |_L |_U

def _rbit(p):
''' 生成一位随机码 '''
return maybe[random.randint(0,maybesize-1)]

def generate(l):
''' 生成指定长度的密码 '''
return ''.join(map(_rbit, xrange(l)))

def chk(pwd, chklogic = _FULL):
''' 按指定的逻辑检查给出的密码 '''
stat = 0
for c in pwd:
if c in 'abcdefghijklmnopqrstuvwxyz':
stat |= _L
elif c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
stat |= _U
elif c in '0123456789':
stat |= _D
elif c in '~!@#$%^&*()_+':
stat |= _S
return stat == chklogic

def groupGenerate(cnt, chklogic = _FULL):
''' 生成满足指定的检查逻辑要求的一组密码, cnt:指定个数 '''
pwds = []
while cnt:
pwd = generate(12)
if chk(pwd, chklogic):
pwds.append(pwd)
cnt -= 1
return pwds


if __name__ == '__main__':
print '\n'.join(groupGenerate(cnt = 10))
print '-'*32
print '\n'.join(groupGenerate(cnt = 10, chklogic = _DLU_))

>pythonw -u "randomPassword.py"
shHa43IQ_2uw
s4aY)U3OV%uW
F2iU%JaDr2WT
O4w$QkzXQCP7
aXXEXT9(%Q5*
$6dSNWj)eQ$3
Z&MDdl+5t_r3
0nU%ic@)gQsZ
pNC2+Dd_3*Q%
aFC%MySdI5qb
--------------------------------
YI14CnavNzdS
5R14Nr7NxDdr
71uuSXxcq3cH
RFmOb8KlRgM8
0vCHw7SaxjYu
WgEVPf9dgtEs
PZ4mA4RMMqzc
XbFduLmnhN6h
d58QsKrM77d4
OjWPhDs6SjYV
>Exit code: 0 Time: 0.561
tim_spac 2010-12-02
  • 打赏
  • 举报
回复

import random

maybe = '0123456789'\
'abcdefghijklmnopqrstuvwxyz'\
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\
'~!@#$%^&*()_+'

maybesize = len(maybe)
_D, _L, _U, _S = 1, 2, 4, 8
_FULL = _D| _L| _U| _S
_DLU_ = _D| _L| _U

def _rbit(p): return maybe[random.randint(0,maybesize-1)]

def generate(l):
return ''.join(map(_rbit, xrange(l)))

def chk(pwd, chklogic = _FULL):
d, l, u, s = 0, 0, 0, 0
for c in pwd:
if c in 'abcdefghijklmnopqrstuvwxyz':
l = _L
elif c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
u = _U
elif c in '0123456789':
d = _D
elif c in '~!@#$%^&*()_+':
s = _S
return (l|u|d|s) == chklogic


def groupGenerate(cnt, chklogic = _FULL):
pwds = []
while cnt:
pwd = generate(12)
if chk(pwd, chklogic):
pwds.append(pwd)
cnt -= 1
print '\n'.join(pwds)

if __name__ == '__main__':
groupGenerate(cnt = 10)
print '-'*32
groupGenerate(cnt = 10, chklogic = _DLU_)

>pythonw -u "randomPassword.py"
02g1$Au(Wbj7
hFIK2hQ*oh1n
Ib4DisSXPQ3)
c4gr5#SFn!DU
Rq~5x8GRl8lJ
hTgh!0h~968W
kY$(QKVar33g
bDlDm8vrXi&t
V_~YkJP~F^2~
KCLmwAY^&13m
--------------------------------
naT8ZCVaVWo7
fu6wAFXYpxVU
pKIJ9WoMrZbp
CN3Wap6clluP
uNVBQRTWik0S
2ThhfnrD3Y0g
zVFQ3SEx1VV5
B4ClxgU59Tqe
DCMasvog3AZN
Tk0FusjuPQ1d
>Exit code: 0 Time: 0.460
tianxicool 2010-12-02
  • 打赏
  • 举报
回复
恩,自动注册网站时为用户分配密码
iambic 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 i_nbfa 的回复:]

好像是随机生成一个长度8包含大小写字母和数字的字符串吧,
其中至少要有一个小写一个大写和一个数字。
[/Quote]
问题是这东西有什么实用性?网站自动注册时生成密码?
tianxicool 2010-12-02
  • 打赏
  • 举报
回复
3楼生成的密码好像不能保证每种数字,大小写,特殊字符都出现。
某些有特殊要求的网站,要求各种字符都要出现。
tim_spac 2010-12-02
  • 打赏
  • 举报
回复

import random

maybe = '0123456789'\
'abcdefghijklmnopqrstuvwxyz'\
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\
'~!@#$%^&*()_+'
maybesize = len(maybe)

def rbit(p): return maybe[random.randint(0,maybesize-1)]
def rpwd(l): return ''.join(map(rbit, xrange(l)))

def tester():
for i in xrange(10):
print rpwd(8)

if __name__ == '__main__':
tester()


>pythonw -u "randomPassword.py"
G_)ew1*B
r1uRZJS%
UpGt#2UE
FN@9q9ao
tiMcvbBg
&RF#lbDJ
&9SibvVg
clf6uI^*
Uc85z+$m
q+WE#a!d
>Exit code: 0 Time: 0.456
I_NBFA 2010-12-02
  • 打赏
  • 举报
回复
好像是随机生成一个长度8包含大小写字母和数字的字符串吧,
其中至少要有一个小写一个大写和一个数字。
iambic 2010-12-02
  • 打赏
  • 举报
回复
“随机密码”是干什么用的?

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧