如何创建一个Java程序来检查你的密码是否强大?

时间:2016-05-26 07:22:40

标签: java passwords

我希望程序能做两件事:

  1. 检查字符串(密码输入)是否包含字母和数字。
  2. 检查密码是否至少包含8个字符。
  3. 这是我的代码:

    import java.util.*;
    class howstrong
    {
      public static void main(String ar[])
      {
        String password;
        int i;
        int c=0;
        Scanner in = new Scanner(System.in);
        System.out.println("ENTER PASSWORD");
        password = in.next();
        if (password.length() <= 8)
        {
          for (i = 0; i <= password.length(); i++)
          {
            char x = password.charAt(i);
            if (Character.isLetter(x))
            {
              if (Character.isDigit(x))
              c = 1;
            }
          }
          if (c == 1)
            System.out.println("STRONG");
          else 
            System.out.println("NOT STRONG");
        }
        else
          System.out.println("HAVE AT LEAST 8 CHARACTERS");
      }
    }
    

4 个答案:

答案 0 :(得分:5)

您有几个问题:

i <= password.length()应为i < password.length()

if (password.length() <= 8)应为if (password.length() >= 8)

您正在检查字符是否同时是字母和数字。

最后,我建议使用两个标志,一个用于检测是否有字母,另一个用于检测是否有数字。

全部放在一起:

import java.util.Scanner;

class howstrong {
    public static void main(final String ar[]) {
        String password;
        Scanner in = new Scanner(System.in);
        System.out.println("ENTER PASSWORD");
        password = in.next();

        boolean hasLetter = false;
        boolean hasDigit = false;

        if (password.length() >= 8) {
            for (int i = 0; i < password.length(); i++) {
                char x = password.charAt(i);
                if (Character.isLetter(x)) {

                    hasLetter = true;
                }

                else if (Character.isDigit(x)) {

                    hasDigit = true;
                }

                // no need to check further, break the loop
                if(hasLetter && hasDigit){

                    break;
                }

            }
            if (hasLetter && hasDigit) {
                System.out.println("STRONG");
            } else {
                System.out.println("NOT STRONG");
            }
        } else {
            System.out.println("HAVE AT LEAST 8 CHARACTERS");
        }
    }
}

答案 1 :(得分:3)

有一个Regex表达式可用于检查密码强度。您可以添加一个验证方法来检查密码是否与表达式匹配: 所以你在代码中调用这个方法就像这样:

   password = in.next();

   if(isStrong(password){
      //good password, do stuff
    }
   else{
        //not so good, prompt again
   }

方法如下:

private boolean isStrong(String password){
    return password.matches("^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z])");

  }

以下是可用于检查密码强度的正则表达式。

^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$

您可以查看原始帖子和所选答案here

答案 2 :(得分:0)

在你的循环中,检查你的角色是否是一个字母。所以c永远不会被设置为1.我建议您学习使用调试器,它将帮助您轻松解决此类错误。

答案 3 :(得分:0)

我不知道,因为它没有指定,是您只是出于锻炼目的还是需要在现实应用中实现?

在第二种情况下,建议您使用现有的库来检查密码是否足够强。

选中zxcvbn Java version on github,这是Dropbox提供的库的移植。