首页 > 试题广场 >

密码强度检查

[编程题]密码强度检查
  • 热度指数:284 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}在网络安全中,评估密码的强度是重要的基本操作。请根据给定的密码字符串,判断其强度级别。
\hspace{15pt}强度评估规则如下:
\hspace{23pt}\bullet\, 如果密码长度小于 8,则强度为 \texttt{Weak}
\hspace{23pt}\bullet\, 否则,检查密码中包含的字符类型(共四种):小写字母(\texttt{a-z})、大写字母(\texttt{A-Z})、数字(\texttt{0-9})和特殊字符(非字母、非数字的可见字符);
\hspace{23pt}\bullet\, 如果包含所有四种类型,则强度为 \texttt{Strong}
\hspace{23pt}\bullet\, 如果包含正好三种类型,则强度为 \texttt{Medium}
\hspace{23pt}\bullet\, 其他情况,强度为 \texttt{Weak}

\hspace{15pt}现在,给定多个密码字符串,请为每个密码输出其强度级别。

【名词解释】
\hspace{15pt}可见字符集为 ASCII 码在 33126 范围内的可见字符。您可以参阅下表获得其详细信息(您可能关注的内容是,这其中不包含空格、换行)。

../图片/AllAscii.png

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 100\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}在一行上输入一个由可见字符集构成的字符串 s \left(1 \leqq {\rm length}(s) \leqq 20\right),表示密码。


输出描述:
\hspace{15pt}对于每一组测试数据,新起一行。输出一个字符串,表示该密码的强度级别(\texttt{Strong}\texttt{Medium}\texttt{Weak})。
示例1

输入

3
Abc123!@
abc123
Password1!

输出

Strong
Weak
Strong
import sys

def get_pwd_strength(string):  # get strings ord.
    #    asciis= [ord(char) for char in string ]
    strength = 0  # 1,2,Weak;3,Medium;4,Strong;
    lower_letters = False
    upper_letters = False
    number = False
    special_char = False
    if len(string) < 8:
        return strength + 1
    for char in string:
        if 48 <= ord(char) <= 57:
            if number:
                continue
            number = True
            strength += 1
            continue
        if 65 <= ord(char) <= 90:
            if upper_letters:
                continue
            upper_letters = True
            strength += 1
            continue
        if 97 <= ord(char) <= 122:
            if lower_letters:
                continue
            lower_letters = True
            strength += 1
            continue
        else:
            if special_char:
                continue
            special_char = True
            strength += 1

        if strength == 4:
            break
    return strength

groups_num = sys.stdin.readline().strip()
# print(f"group_num:{groups_num}")
try:
    groups_num = int(groups_num)
except:
    print(f'groups_num:{groups_num} illegal')

lines = []
for line in range(groups_num):
    line = sys.stdin.readline().strip()
    lines.append(line)
    # print(f"line:{line}")
for line in lines:
    line_strength = get_pwd_strength(line)
    if line_strength == 3:
        print("Medium")
        continue
    if line_strength == 4:
        print("Strong")
        continue
    else:
        print("Weak")

编辑于 今天 12:02:24 回复(0)