Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
密码强度验证java_Java - Fatal编程技术网

密码强度验证java

密码强度验证java,java,Java,我需要编写一个程序,根据以下条件检查密码的强度,并将密码类型输出为“太短”、“弱”、“中”或“强” 条件: 1) 密码长度应为8个字符 2) 它应至少包含一个大写字母和一个小写字母3)它应包含以下一个或多个特殊字符:~、!、@、#、$、%、^、&、* 4) 它应该包含一个或多个数字。输出定义为:如果第一个条件失败,则输出=“太短”,如果只有两个条件包括第一个条件 如果满足,则输出=“弱”如果仅满足包括第一个条件在内的三个条件,则输出=“中等”如果满足所有四个条件,则输出=“强” 以下是我编写的代

我需要编写一个程序,根据以下条件检查密码的强度,并将密码类型输出为“太短”、“弱”、“中”或“强”

条件: 1) 密码长度应为8个字符 2) 它应至少包含一个大写字母和一个小写字母3)它应包含以下一个或多个特殊字符:~、!、@、#、$、%、^、&、* 4) 它应该包含一个或多个数字。输出定义为:如果第一个条件失败,则输出=“太短”,如果只有两个条件包括第一个条件

如果满足,则输出=“弱”如果仅满足包括第一个条件在内的三个条件,则输出=“中等”如果满足所有四个条件,则输出=“强” 以下是我编写的代码:

class PasswordStrengthValidation
{
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the password");
        String inputPassword = scan.next();
        int uppercase = 0;
        int lowercase = 0;
        int specialcharacters = 0;
        int digits = 0;
        char[] Password = inputPassword.toCharArray();
        for (int index = 0; index < inputPassword.length(); index++)
        {
            if (Character.isUpperCase(Password[index]))
            {
                uppercase = 1;
            }
            if (Character.isLowerCase(Password[index]))
            {
                lowercase = 1;
            }
            if (Character.isDigit(Password[index]))
            {
                digits = 1;
            }
        }
        if (inputPassword.contains("~") || inputPassword.contains("!") || inputPassword.contains("@")
            || inputPassword.contains("#") || inputPassword.contains("$") || inputPassword.contains("%")
            || inputPassword.contains("^") || inputPassword.contains("&") || inputPassword.contains("*")) ;
        {
            specialcharacters = 1;
        }
        if (inputPassword.length() < 8)

            System.out.println("Too Short");

        if (inputPassword.length() >= 8 && (((uppercase == 1) && (lowercase == 1)) || (digits == 1) || (specialcharacters == 1)))

            System.out.println("Weak");

        if ((inputPassword.length() >= 8 && (((uppercase == 1) && (lowercase == 1)) || (digits == 1) && (specialcharacters == 1)))
            &&
            (inputPassword.length() >= 8 && (((uppercase == 1) && (lowercase == 1)) && (digits == 1) || (specialcharacters == 1))))

            System.out.println("Medium");

        if (inputPassword.length() >= 8 && (uppercase == 1) && (lowercase == 1) && (digits == 1) && (specialcharacters == 1))

            System.out.println("Strong");

    }
}
类密码强度验证
{
公共静态void main(字符串[]args)
{
//TODO自动生成的方法存根
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入密码”);
字符串inputPassword=scan.next();
int大写=0;
int小写=0;
int specialcharacters=0;
整数位数=0;
char[]Password=inputPassword.toCharArray();
对于(int index=0;index=8&&((大写==1)和&((小写==1))| |(数字==1)| |(特殊字符==1)))
System.out.println(“弱”);
如果((inputPassword.length()>=8&&((大写==1)&&&(小写==1))| |(数字==1)&&&(特殊字符==1)))
&&
(inputPassword.length()>=8&&((大写==1)和((小写==1))&&(数字==1)| |(特殊字符==1)))
系统输出打印项次(“中”);
如果(inputPassword.length()>=8&&&(大写==1)&&&(小写==1)&&(数字==1)&&&(特殊字符==1))
System.out.println(“强”);
}
}
然而,当我试图通过输入“Password”来实现下面的代码时,我得到的输出是“弱”,然后是“中等”。有谁能帮我一下,我哪里做错了。提前谢谢

我建议使用正则表达式

if (inputPassword.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})")){
    System.out.println("Strong");
} else if (inputPassword.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})")){
    System.out.println("Medium");
} else if (inputPassword.matches("^(?=.*[a-z])(?=.*[0-9])(?=.{8,})")){
    System.out.println("Weak");
} else if (inputPassword.matches("^(?=.*[A-Z])(?=.*[0-9])(?=.{8,})")){
    System.out.println("Weak");
} // etc
可以通过删除或更改表达式中的条件来调整条件

  • (?=.[a-z])字符串必须至少包含1个小写字母 性格

  • (?=.[A-Z])字符串必须至少包含1个大写字母
    字母字符

  • (?=.[0-9])字符串必须至少包含1 数字字符

  • (?=[!@\$%\^&])字符串必须至少包含一个特殊字符 字符,但我们正在转义保留的正则表达式字符以避免 冲突

  • (?=.{8,})字符串必须为八个字符或更长

如果要在此处发布代码,请学习正确的缩进。这使它更容易阅读。您的IDE基本上可以自动完成,因此没有任何借口。这一次我为您修复了它。在第一个if和println之后,您缺少了else if。组合
((大写==1)和&(小写==1))| |(数字==1)和&(特殊字符==1))
((大写==1)和(小写==1))和&(数字==1)| | |(特殊字符==1))
看起来相当错误。还要注意,
&&
的优先级高于
|
。因此,如果你写
(上下)和&digits||special
,那么你只需要“special”来实现这个表达式,只是一个旁注:。因此,您的代码应该总是输出
“弱”
,您应该从代码中进行一个简单的测试,检查条件并打印密码强度(基本上是循环之后的所有内容)。一旦您这样做,您将能够看到您的一些条件重叠,并且确实可以输入一个同时被视为
中等
的密码。