密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
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,
WEAK,
AVERAGE,
STRONG,
VERY_STRONG,
SECURE,
VERY_SECURE
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String s=sc.nextLine();
System.out.print(count(s));
}
sc.close();
}
private static String count(String s){
int score=0;//分数
//1.长度判断
if(s.length()<=4){
score=5;
}else if(s.length()<=7&&s.length()>=4){
score=10;
}else{
score=25;
}
int counta=0;int countA=0;int countN=0;int countX=0;
//2.用finda,findA,findN,findX分别记录字母数字符号是否出现1出现,0未出现;(多余)
//counta,countA,记录字幕出现次数countN记录数字出现的次数,countX记录符号出现的次数(同时也可判断出是否存在)
for(int i=0;i<s.length();i++){
if(s.charAt(i)>='a'&&s.charAt(i)<='z'){
counta++;
}else if(s.charAt(i)>='A'&&s.charAt(i)<='Z'){
countA++;
}else if(s.charAt(i)>='0'&&s.charAt(i)<='9'){
countN++;
}else if((s.charAt(i)>=0x21&&s.charAt(i)<=0x2F)||(s.charAt(i)>=0x3A&&s.charAt(i)<=0x40)||(s.charAt(i)>=0x5B&&s.charAt(i)<=0x60)||(s.charAt(i)>=0x7B&&s.charAt(i)<=0x7E)){
countX++;
}
}
if(counta==0&&countA==0){score=score;}
else if((counta==0&&countA>0)||(counta>0&&countA==0)){score+=10;}else{score+=20;}
if(countN==0){score=score;}
else if(countN==1){score+=10;}else{score+=20;}
if(countX==0){score=score;}
else if(countX==1){score+=10;}else{score+=20;}
if(counta>0&&countA>0&&countN>0&&countX>0){score+=5;}
else if((counta>0&&countA==0&&countN>0&&countX>0)||(counta==0&&countA>0&&countN>0&&countX>0)){score+=3;}
else if((counta>0&&countA==0&&countN>0)||(counta==0&&countA>0&&countN>0)){score+=2;}
if(score>=90){return "VERY_SECURE";}
else if(score>=80){return "SECURE";}else if(score>=70){return "VERY_STRONG";}
else if(score>=60){return "STRONG";}else if(score>=50){return "AVERAGE";}
else if(score>=25){return "WEAK";}else if(score>=0){return "VERY_WEAK";}
return null;
}
}
本文介绍了一种密码强度评估方法,通过密码长度、字符种类等因素综合打分,最终给出密码的安全等级。该方法能帮助用户理解密码的安全性并提高密码设置的质量。
1243

被折叠的 条评论
为什么被折叠?



