使用python校验密码强度

193 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 '强密码'