OJ-----密码强度等级

本文介绍了一种密码强度评估方法,通过密码长度、字符种类等因素综合打分,最终给出密码的安全等级。该方法能帮助用户理解密码的安全性并提高密码设置的质量。

密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

       一、密码长度:

       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;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值