代码:
import
random
import
string
import
time
#
strong.high = 3 #random for the whole passwd
#
storng.middle = 2 # include one special sign
#
strong.ow = 1 # just include characters or digits
def
mkpassByRandom(size
=
8
, strong
=
2
):
chars
=
[]
chars.extend([i
for
i
in
string.ascii_letters])
chars.extend([i
for
i
in
string.digits])
chars.extend([i
for
i
in
'
\
'"
!@#$%&*()-_=+[{}]~^,<.>;:/?'])
passwd
=
''
strong
=
int(strong)
if
(strong
<=
1
) :
for
i
in
range(size):
passwd
+=
chars[random.randint(0,len(string.ascii_letters
+
string.digits)
-
1
)]
random.seed
=
int(time.time())
elif
(strong
==
2
):
newpasswd
=
''
for
i
in
range(size
-
1
):
newpasswd
+=
chars[random.randint(0,len(string.ascii_letters
+
string.digits)
-
1
)]
random.seed
=
int(time.time())
newpasswd
+=
chars[random.randint(len(string.ascii_letters
+
string.digits) , len(chars)
-
1
)]
ll
=
[ch
for
ch
in
newpasswd]
random.shuffle(ll)
for
l
in
ll:
passwd
+=
l
elif
(strong
>=
3
):
for
i
in
range(size):
passwd
+=
chars[random.randint(0, len(chars)
-
1
)]
random.seed
=
int(time.time())
random.shuffle(chars)
else
:
pass
return
passwd
def
rule1(ch):
rulesdict
=
{
'
o
'
: 0,
'
i
'
:
'
!
'
,
'
b
'
:
8
,
'
p
'
:
'
P
'
,
'
m
'
:
'
M
'
}
newch
=
ch
if
ch
in
rulesdict.keys():
newch
=
rulesdict[ch]
return
newch
def
rule2(ch):
if
(ch.isupper()):
return
ch.lower()
elif
(ch.islower()):
return
ch.upper()
return
ch
def
mkpassByRules(passwd,
*
rules ):
if
(passwd
==
""
or
len(rules)
==
0):
return
passwd
newpasswd
=
""
for
c
in
passwd:
r
=
random.randint(0, len(rules)
-
1
)
ch
=
(rules[r])(c)
newpasswd
+=
str(ch)
return
newpasswd
def
mkpass(size
=
8
, strong
=
2
, initpasswd
=
""
):
if
(
not
initpasswd
==
""
):
return
mkpassByRules(initpasswd, rule1, rule2)
else
:
return
mkpassByRandom(size,strong)
print
( mkpass(initpasswd
=
"
Password123
"
))
print
( mkpass(strong
=
1
))
print
( mkpass(strong
=
2
))
print
( mkpass(strong
=
3
))
参考:http://code.activestate.com/recipes/577339-random-passwords/
完!