首页 > 试题广场 >

密码强度检查

[编程题]密码强度检查
  • 热度指数:1551 时间限制: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
#include <stdio.h>
#include <string.h>

void check(char *s)
{
    if(strlen(s)<8)
    {
        printf("Weak\n");
        return;
    }
    int l,m,n,k;
    l = m = n = k = 0;
    for(int i=0;i<strlen(s);i++)
    {
        if(s[i]<=122&&s[i]>=97)
        {
            l = 1;
        }
        else if(s[i]<=90&&s[i]>=65)
        {
            m = 1;
        }
        else if(s[i]<=57&&s[i]>=48)
        {
            n = 1;
        }
        else if((s[i]>=33&&s[i]<=47)||(s[i]>=58&&s[i]<=64)||(s[i]>=91&&s[i]<=96)||(s[i]>=123&&s[i]<=126))
        {
            k = 1;
        }
    }
    int sum = l+m+n+k;
    if(sum == 4)
    printf("Strong\n");
    else if(sum == 3)
    printf("Medium\n");
    else
    printf("Weak\n");
}

int main()
{
    int a;
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        char s[20];
        scanf("%s",s);
        check(s);
    }return 0;
}
发表于 2025-10-18 16:38:01 回复(0)