标签:
密码复杂度检测.py
1 import re 2 ‘‘‘ 3 接口调用示例: 4 import 密码复杂度检测 as pc 5 6 while True: 7 str1 = input("请输入密码> ").strip() 8 if pc.check_password_complexity(str1,2): 9 print("%s复杂度符合要求"%str1) 10 break 11 12 13 密码复杂度检查,包括两种复杂度检查, 14 level=1时, 15 密码不能包含中文, 16 长度在10到20个字符之间 17 密码必须已字母或下划线开始 18 密码必须包含字母、数字、特殊字符 19 level-2时, 20 包含level=1的条件 21 不能有一个字符连续出现超过字符长度减8次的情况,比如字符长度是10,则不能有一个字符连续出现2次的情况 22 ‘‘‘ 23 def check_password_complexity(p,level): 24 """ 25 26 :param p: 传递进来的待检测的密码 27 :param level: 需要检查的强度 28 :return: 如果密码复杂度符合要求则返回True,否则返回False 29 """ 30 # 判断等级是否是1或2 31 assert level in (1,2),‘level密码强度检查只能是1或2‘ 32 # 判断是否包含中文 33 zhPattern = re.compile(u‘[\u4e00-\u9fa5]+‘) 34 if zhPattern.search(p): 35 print("\033[1;31;40m密码不能包含中文!\033[0m") 36 # 检查密码长度 37 elif not 10 <= len(p) <= 20: 38 print("\033[1;31;40m长度不符合要求,必须在10到20个字符之间\033[0m") 39 # 检查密码是否已字母或下划线开头 40 elif not re.match("^[a-zA-Z_]",p): 41 print("\033[1;31;40m密码必须以字母或下划线开头\033[0m") 42 # 检查是否包含数字字母和特殊字符 43 elif not (re.search(‘[\d]‘,p) and re.search(‘[a-zA-Z]‘,p) and re.search(‘[\W]‘,p)): 44 print("\033[1;31;40m密码必须包含数字字母和特殊字符\033[0m") 45 # 检查密码是否过于简单 46 elif level == 1: 47 return True 48 elif level == 2: 49 # 高级密码复杂度检查,检查字符是否连续出现超过字符串长度减8次,更高级检查待开发 50 l = len(p)-8 51 # print(l) 52 p_temp = p[:9] 53 for char in p_temp: 54 # chars = re.search(r‘[%s]{%d,}‘%(char,l),p) 55 if char*l in p: 56 print("您的密码过于简单") 57 print("%s重复出现超过%d次!重复次数不能超过字符长度减8次"%(char,l)) 58 return False 59 else: 60 return True 61 62 if __name__ == ‘__main__‘: 63 print("请使用\033[1;31;0mheck_password_complexity\033[0m(\033[1;32;0mpassword,level\033[0m)调用此函数")
标签:
原文地址:http://www.cnblogs.com/owasp/p/5476187.html