当前位置:网站首页>【Day_10 0428】密码强度等级
【Day_10 0428】密码强度等级
2022-08-01 17:41:00 【安河桥畔】
密码强度等级
题目来源
牛客网:密码强度等级
题目描述
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
5 分: 小于等于4 个字符
10 分: 5 到7 字符
25 分: 大于等于8 个字符
二、字母:
0 分: 没有字母
10 分: 密码里的字母全都是小(大)写字母
20 分: 密码里的字母符合”大小写混合“
三、数字:
0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字
四、符号:
0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号
五、奖励(只能选符合最多的那一种奖励):
2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号
最后的评分标准:
= 90: 非常安全
= 80: 安全(Secure)
= 70: 非常强
= 60: 强(Strong)
= 50: 一般(Average)
= 25: 弱(Weak)
= 0: 非常弱(Very_Weak)
对应输出为:
VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK
请根据输入的密码字符串,进行安全评定。
注:
字母:a-z, A-Z
数字:0-9
符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
!"#$%&'()*+,-./ (ASCII码:0x21~0x2F)
:;<=>[email protected] (ASCII码:0x3A~0x40)
[]^_` (ASCII码:0x5B~0x60)
{|}~ (ASCII码:0x7B~0x7E)
提示:
1 <= 字符串的长度<= 300
输入描述
输入一个string的密码
输出描述
输出密码等级
示例1
输入
输出
VERY_SECURE
说明
样例的密码长度大于等于8个字符,得25分;大小写字母都有所以得20分;有两个数字,所以得20分;包含大于1符号,所以得25分;由于该密码包含大小写字母、数字和符号,所以奖励部分得5分,经统计得该密码的密码强度为25+20+20+25+5=95分
示例2
输入
Jl)M:+
输出
AVERAGE
说明:
示例2的密码强度为10+20+0+25+0=55分。
思路分析
- 这道题没有什么难度,对字符串进行遍历统计即可
- 遍历前将num,sym定义为0,遍历中进入num的if判断中再进行一个if判断,如果num为0,说明时第一次出现数字,赋值为10;如果num不为0,说不是第一次出现,赋值为20;sym与num原理相同
代码展示
#include<iostream>
#include<string>
#include <cstdio>
using namespace std;
int main() {
string str;
int score;
while (cin >> str)
{
//length
int sz = str.size();
if (sz <= 4)
{
score += 5;
}
else if (sz >= 5 && sz <= 7)
{
score += 10;
}
else
{
score += 25;
}
//letter
int upper = 0;
int lower = 0;
int num = 0;
int sym = 0;
for (auto e : str)
{
//标记大写字母
if (e >= 65 && e <= 90)//可以直接写'A''B'
{
upper = 10;
}
//标记小写字母
else if (e >= 97 && e <= 122)
{
lower = 10;
}
//数字
else if (e >= 48 && e <= 57)
{
if (num)
{
num = 20;
}
else
{
num = 10;
}
}
//符号
else if ((e >= 0x21 && e <= 0x2f) ||
(e >= 0x3a && e <= 0x40) ||
(e >= 0x5b && e <= 0x60) ||
(e >= 0x7b && e <= 0x7e))
{
if (sym)
{
sym = 25;
}
else
{
sym = 10;
}
}
}
score = score + upper + lower + num + sym;
//奖励分数
if ((upper || lower) && num)
{
score += 2;
if (sym)
{
score += 1;
if (upper && lower)
{
score += 2;
}
}
}
if (score >= 90)
{
cout << "VERY_SECURE" << endl;
}
else if (score >= 80)
{
cout << "SECURE" << endl;
}
else if (score >= 70)
{
cout << "VERY_STRONG" << endl;
}
else if (score >= 60)
{
cout << "STRONG" << endl;
}
else if (score >= 50)
{
cout << "AVERAGE" << endl;
}
else if (score >= 25)
{
cout << "WEAK" << endl;
}
else
{
cout << "VERY_WEAK" << endl;
}
}
}
边栏推荐
猜你喜欢
随机推荐
2022年SQL经典面试题总结(带解析)
02 es cluster construction
缓存一致性MESI与内存屏障
C# LibUsbDotNet 在USB-CDC设备的上位机应用
LeaRun.net快速开发动态表单
关于单应性矩阵的若干思考
hcip第九天
md5sum源码 可多平台编译
自定义注解实现日志打印时屏蔽特定字段不打印
tooltip 控件
2022年SQL大厂高频实战面试题(详细解析)
B011 - 基于51的多功能指纹智能锁
云商店携手快报税,解锁财务服务新体验!
金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(2. 概述)
My new book has sold 10,000 copies!
访问域名直接访问wordpress
QT_事件类
Flask框架实战
想做期货,农产品期货怎么炒?波动大么
MySql 怎么查出符合条件的最新的数据行?