密碼複雜度檢查函數

密碼複雜度檢測.pypython

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("\033[1;31;40m密碼不能包含中文!\033[0m")
    # 檢查密碼長度
    elif not 10 <= len(p) <= 20:
        print("\033[1;31;40m長度不符合要求,必須在10到20個字符之間\033[0m")
    # 檢查密碼是否已字母或下劃線開頭
    elif not re.match("^[a-zA-Z_]",p):
        print("\033[1;31;40m密碼必須以字母或下劃線開頭\033[0m")
    # 檢查是否包含數字字母和特殊字符
    elif not (re.search('[\d]',p) and re.search('[a-zA-Z]',p) and re.search('[\W]',p)):
        print("\033[1;31;40m密碼必須包含數字字母和特殊字符\033[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("請使用\033[1;31;0mheck_password_complexity\033[0m(\033[1;32;0mpassword,level\033[0m)調用此函數")
相關文章
相關標籤/搜索