华为机试-密码强度等级

Posted WenJieWangFlyToWorld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试-密码强度等级相关的知识,希望对你有一定的参考价值。

题目描述

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

       一、密码长度:

       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 

 

       请根据输入的密码字符串,进行安全评定。

       注:

       字母:a-z, A-Z

       数字:-9

       符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)

       !"#$%&‘()*+,-./     (ASCII码:x21~0x2F)

       :;<=>[email protected]             (ASCII<=><=><=><=><=>码:x3A~0x40)

       [\]^_`              (ASCII码:x5B~0x60)

  {|}~                (ASCII码:x7B~0x7E)

接口描述:

 

 Input Param 
      String pPasswordStr:    密码,以字符串方式存放。

 Return Value
   根据规则评定的安全等级。

 public static Safelevel GetPwdSecurityLevel(String pPasswordStr)
 {
     /*在这里实现功能*/
  return null;
 }

输入描述:

输入一个string的密码

输出描述:

输出密码等级

示例1

输出

VERY_SECURE

Java程序代码:

  1. import java.util.Scanner;  
  2.   
  3. public class Main {  
  4.   
  5.     public static void main(String[] args) {  
  6.   
  7.         Scanner scanner = new Scanner(System.in);  
  8.         while (scanner.hasNext()) {  
  9.             String string = scanner.nextLine();  
  10.   
  11.             String result = GetPwdSecurityLevel(string);  
  12.             System.out.println(result);  
  13.         }  
  14.   
  15.     }  
  16.   
  17.     private static String GetPwdSecurityLevel(String string) {  
  18.         int length = string.length();// 1 长度  
  19.         int upChara = 0;// 2 大写字母  
  20.         int downChara = 0;// 3 小写字母  
  21.         int chara = 0;// 4 符号  
  22.         int number = 0;// 5 数字  
  23.         int sumScore = 0;  
  24.         for (int i = 0; i < length; i++) {  
  25.             if (string.charAt(i) >= ‘0‘ && string.charAt(i) <= ‘9‘) {  
  26.                 number++;  
  27.             } else if (string.charAt(i) >= ‘a‘ && string.charAt(i) <= ‘z‘) {  
  28.                 downChara++;  
  29.             } else if (string.charAt(i) >= ‘A‘ && string.charAt(i) <= ‘Z‘) {  
  30.                 upChara++;  
  31.             } else {  
  32.                 chara++;  
  33.             }  
  34.   
  35.         }  
  36.         // 1 积分  
  37.         if (length <= 4) {  
  38.             sumScore += 5;  
  39.         } else if (length >= 8) {  
  40.             sumScore += 25;  
  41.         } else {  
  42.             sumScore += 10;  
  43.         }  
  44.         // 2积分  
  45.         if (upChara != 0 && downChara != 0) {  
  46.             sumScore += 20;  
  47.         } else if (upChara == 0 && downChara == 0) {  
  48.             sumScore += 0;  
  49.         } else {  
  50.             sumScore += 10;  
  51.         }  
  52.   
  53.         // 3 数字  
  54.         if (number == 0) {  
  55.             sumScore += 0;  
  56.         } else if (number == 1) {  
  57.             sumScore += 10;  
  58.         } else {  
  59.             sumScore += 20;  
  60.         }  
  61.   
  62.         // 4 符号  
  63.         if (chara == 0) {  
  64.             sumScore += 0;  
  65.         } else if (chara == 1) {  
  66.             sumScore += 10;  
  67.         } else {  
  68.             sumScore += 25;  
  69.         }  
  70.   
  71.         // 5奖励  
  72.         if ((upChara > 0 || downChara > 0) && number > 0) {  
  73.             if (chara > 0) {  
  74.                 sumScore += 3;  
  75.             } else {  
  76.                 sumScore += 2;  
  77.             }  
  78.   
  79.         } else if (upChara > 0 && downChara > 0 && number > 0 && chara > 0) {  
  80.             sumScore += 5;  
  81.         }  
  82.   
  83.         return sumScore >= 90 ? "VERY_SECURE"  
  84.                 : sumScore >= 80 ? "SECURE"  
  85.                         : sumScore >= 70 ? "VERY_STRONG"  
  86.                                 : sumScore >= 60 ? "STRONG"  
  87.                                         : sumScore >= 50 ? "AVERAGE" : sumScore >= 25 ? "WEAK" : "VERY_WEAK";  
  88.     }  
  89.   
  90. }  

以上是关于华为机试-密码强度等级的主要内容,如果未能解决你的问题,请参考以下文章

华为机试HJ87:密码强度等级

华为机试题 HJ87密码强度等级

华为机试题 HJ87密码强度等级

华为OJ平台——密码强度等级

独家华为OD机试 - 寻找密码(C 语言解题)

2022&2023华为OD机试 - 单词反转 2(Python)