密码复杂度检测.py
import re ''' 接口调用示例: import 密码复杂度检测 as pc while True: str1 = input("请输入密码> ").strip() if pc.check_password_complexity(str1,2): print("%s复杂度符合要求"%str1) break 密码复杂度检查,包括两种复杂度检查, level=1时, 密码不能包含中文, 长度在10到20个字符之间 密码必须已字母或下划线开始 密码必须包含字母、数字、特殊字符 level-2时, 包含level=1的条件 不能有一个字符连续出现超过字符长度减8次的情况,比如字符长度是10,则不能有一个字符连续出现2次的情况 ''' def check_password_complexity(p,level): """ :param p: 传递进来的待检测的密码 :param level: 需要检查的强度 :return: 如果密码复杂度符合要求则返回True,否则返回False """ # 判断等级是否是1或2 assert level in (1,2),'level密码强度检查只能是1或2' # 判断是否包含中文 zhPattern = re.compile(u'[u4e00-u9fa5]+') if zhPattern.search(p): print(" 33[1;31;40m密码不能包含中文! 33[0m") # 检查密码长度 elif not 10 <= len(p) <= 20: print(" 33[1;31;40m长度不符合要求,必须在10到20个字符之间 33[0m") # 检查密码是否已字母或下划线开头 elif not re.match("^[a-zA-Z_]",p): print(" 33[1;31;40m密码必须以字母或下划线开头 33[0m") # 检查是否包含数字字母和特殊字符 elif not (re.search('[d]',p) and re.search('[a-zA-Z]',p) and re.search('[W]',p)): print(" 33[1;31;40m密码必须包含数字字母和特殊字符 33[0m") # 检查密码是否过于简单 elif level == 1: return True elif level == 2: # 高级密码复杂度检查,检查字符是否连续出现超过字符串长度减8次,更高级检查待开发 l = len(p)-8 # print(l) p_temp = p[:9] for char in p_temp: # chars = re.search(r'[%s]{%d,}'%(char,l),p) if char*l in p: print("您的密码过于简单") print("%s重复出现超过%d次!重复次数不能超过字符长度减8次"%(char,l)) return False else: return True if __name__ == '__main__': print("请使用 33[1;31;0mheck_password_complexity 33[0m( 33[1;32;0mpassword,level 33[0m)调用此函数")