2016-06-30 8 views
0

私はこの基本的なパスワードシステムを使用していますが、これまでの私の長さチェッカーコードを整理しました(私のシステムでは、パスワードは6〜 )パスワードシステムのロジックを改善する必要があります

しかし、WEAK、STRONG、MEDIUMの3つのカテゴリにパスワードをソートする必要があるため、強度チェッカーは複雑です。カテゴリはパスワードの文字の種類によって決定されるため、「アルファ」は「弱」、「アルファ」は「中」、「アルファ1234」は強くなります。

パスワードの強度がWEAKの場合、強さがMEDIUMの場合、戻って別のパスワードを入力するようにプログラムに指示してから、別のパスワードを入力するか、入力された、強度が強い場合は、パスワードはこれまでのところ、自動的に

保たれて、私は文字セットを定義する3つの配列を書いている:ここで

public static String[] uppercase = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; 

public static String[] lowercase = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}; 

public static int[] numbers; { 
    numbers = new int[10]; 
    numbers[0] = 0; 
    numbers[1] = 1; 
    numbers[2] = 2; 
    numbers[3] = 3; 
    numbers[4] = 4; 
    numbers[5] = 5; 
    numbers[6] = 6; 
    numbers[7] = 7; 
    numbers[8] = 8; 
    numbers[9] = 9; 
} 

は文字チェッカーメソッドです:

public static boolean containsUppercase(String p) { 
    for (int i=0; i < p.length(); i++) { 
     for (int j = 0; j < uppercase.length; j++) { 
      if (Character.toString(p.charAt(i)).equals(uppercase[j])) { 
       return true; 
      } 
     } 
    } 
return false; 
} 
public static boolean containsLowercase(String p) { 
    for (int i=0; i < p.length(); i++) { 
     for (int j = 0; j < lowercase.length; j++) { 
      if (Character.toString(p.charAt(i)).equals(lowercase[j])) { 
       return true; 
      } 
     } 
    } 
return false; 
} 
public static boolean containsNumbers(String p) { 
    for (int i=0; i < p.length(); i++) { 
     for (int j = 0; j < numbers.length; j++) { 
      if (Character.toString(p.charAt(i)).equals(numbers[j])) { 
       return true; 
      } 
     } 
    } 
return false; 
} 

そしてここでは、パスワード強度チェッカーです:私はプログラムを実行すると

if ((containsUppercase(password)) || (containsLowercase(password)) || (containsNumbers(password))) { 
      JOptionPane.showMessageDialog(null, "Your password strength is WEAK. You must enter another password"); 
      passwordreenter = 0; 
     } 
     if ((containsUppercase(password) && (containsLowercase(password)) || (containsUppercase(password)) && (containsNumbers(password)) || (containsLowercase(password)) && (containsNumbers(password)))) { 
      passwordreenter = JOptionPane.showConfirmDialog(null, "Your password strength is MEDIUM. Would you like to enter another password anyway?"); 
      System.out.println(passwordreenter); 
     } 
     if ((containsUppercase(password)) && (containsLowercase(password) && (containsNumbers(password)))) { 
      JOptionPane.showMessageDialog(null, "Your password strength is STRONG. The program will now close"); 
      System.exit(0); 
     } 

は、どのように私は今、それが行くように、それはすべての単一を通じて、正しいパスワードの強度にまっすぐに行くために取得するif文であればI強力なパスワードを入力してください

+2

' "パスワードしかすることができ[...] 12文字の長"' - ' "Alpha1234が強いだろう"' - うーん...本当に? – David

+0

各キーの各キー押しイベントでフラグを立てることをお勧めします。あなたが上げることができる3つの異なるフラグがあるとします。 1 flag raised =弱い、2 flagsはmeduim、3 flagは強い。 – Radmation

+2

私は "パスワードのエントロピー"を調べることをお勧めします - あなたの分類は大丈夫です。さらに、パスワードをこのような小さな数に制限しないでください。 –

答えて

1

パスワードが "強"の場合、すべてのチェックはtrueを返すので、もちろんすべてのifのステートメントは通過します。あなたが探しているのは、小切手のうちの1つだけを通過すれば「弱い」、2つの小切手を通過するならば「中」、3つすべてを通過するならば「強い」と分類することです。これを行う1つの方法は、intを0に設定して開始し、それが通過する毎に増分してから、ifの最終番号を使用することです。

int level = 0; 
if (containsUppercase(password)) { 
    level++; 
} 
if (containsLowercase(password)) { 
    level++; 
} 
if (containsNumbers(password)) { 
    level++; 
} 

if (level <= 1) { 
    JOptionPane.showMessageDialog(null, "Your password strength is WEAK. You must enter another password"); 
    passwordreenter = 0; 
} else if (level == 2) { 
    passwordreenter = JOptionPane.showConfirmDialog(null, "Your password strength is MEDIUM. Would you like to enter another password anyway?"); 
    System.out.println(passwordreenter); 
} else if (level == 3) { 
    JOptionPane.showMessageDialog(null, "Your password strength is STRONG. The program will now close"); 
    System.exit(0); 
} 
1

最後の2つのif文をelseに置き換えてください。また、強力なパスワードが最初に処理されるようにステートメントの順序を変更してください。

0

強度チェックロジックが正しくありません。指定されたパスワードに大文字、小文字、および数字が含まれている場合、すべて3 ifステートメントがtrueです。 if-elseステートメントを使用していないので、すべて実行されます。

https://codereview.stackexchange.com/もチェックアウトすることをおすすめします。彼らはあなたのコードを整理するのを助けることができます。

0
public static void main(String[] args) { 
    String password = "A"; 
    String passwordStrength = ""; 
    if(password.length() >= 6 && password.length() <= 12) 
     passwordStrength= passStrength(password); 

} 

public static String passStrength(String password) { 
    String[] desc = new String[3]; 
    desc[0] = "Weak"; 
    desc[1] = "Medium"; 
    desc[2] = "Strong"; 



    int score = -1; 


      String pattern = "(.*)(\\d+)(.*)"; 
      Pattern r = Pattern.compile(pattern); 
      Matcher m = r.matcher(password); 
      if(m.find()) score++; 

      pattern = "(.*)([a-z]+)(.*)"; 
      r = Pattern.compile(pattern); 
      m = r.matcher(password); 
      if(m.find()) score++; 

      pattern = "(.*)([A-Z]+)(.*)"; 
      r = Pattern.compile(pattern); 
      m = r.matcher(password); 
      if(m.find()) score++; 

      return desc[score]; 

} 
関連する問題