携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
python的内置库string是个好东西,使用string可以用来生成密码,或者惊喜密码强度检测;
随机生成密码 说到随机,就不能不提python中的另一个内置库random; random是一个随机数函数,包含多个生成随机数的方法:
- random.random() 用于生成一个[0,1)范围的浮点数
- random.uniform(a, b) 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限
- random.randint(a, b) 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限
- random.choice(string) 从一个string中随机选取一个字符
string是python中一个内置的字符串;
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
结合以上两个库,可以实现一个随机密码的生成功能; 两个库都不需要安装,直接引入即可
import string import random
def genPwd(n=8):
all_chs=string.digits+string.ascii_letters+string.punctuation #包含0-9+a-z+A-Z+特殊符号的字符
print("".join(random.sample(all_chs,n)))
result=''
for i in range(n):
ch=random.choice(all_chs) #从all_chs中选择一个字符
result+=ch #拼接
return result
传入一个需要的密码长度的数字,生成指定长度的密码;密码是随机生成,在指定的字符范围,随机选择多个字符的密码,字符可以重复;
如果只是进行强度检测,一个string库足够了;
passwordDic={
'dig' : string.digits, # '0123456789'
'lower' : string.ascii_lowercase, # 'abcdefghijklmnopqrstuvwxyz'
'upper' : string.ascii_uppercase, # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'pun' : string.punctuation # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
}
i, j, k, s = 0, 0, 0, 0
sum = 0
for x in str:
if x in passwordDic.get('dig'):
i += 1
elif x in passwordDic.get('lower'):
j += 1
elif x in passwordDic.get('upper'):
k += 1
elif x in passwordDic.get('pun'):
s += 1
i1, j1, k1, s1 = int(bool(i)), int(bool(j)), int(bool(k)), int(bool(s))
sum = i1 + j1 + k1 + s1
if sum == 0:
return '错误密码格式'
elif sum ==1:
return '弱密码'
elif sum == 2:
return '中低密码'
elif sum == 3:
return '中高密码'
elif sum == 4:
return '强密码'