Java でパスワードを検証する

Waleed 2023年10月12日
Java でパスワードを検証する

ログインページを作成する際に、パスワードを検証し、適切な標準に準拠しているかどうかを確認する必要があることがよくあります。
パスワードの検証には、以下で説明するパスワードポリシーに従って、パスワードが正しいかどうかを確認することが含まれます。

  1. 標準パスワードには少なくとも 8 文字が含まれています
  2. 通常のパスワードには、少なくとも 2つの大文字が含まれています
  3. 標準パスワードには 2つの小文字が含まれています
  4. 標準パスワードには、2つの特別な記号が含まれています

Java でパスワードを検証するアルゴリズム

  1. パスワードを確認する前に、理想的なパスワードに含めるべき大文字、小文字、大文字、または数字の数を指定する必要があります。この目的のために、int 型の変数 MAX、MIN_Uppercase、MIN_Lowercase、Num_Digits、および Special を定義します。
  2. パスワードに含まれる大文字、小文字、数字、または特殊文字の数をカウントするために、整数型の変数 uppercaseCounter、lowercaseCounter、special、および digitCounter を宣言します。
  3. カウンタ変数を宣言した後、それらを 0 で初期化します。カウンタ変数を 0 で初期化することにより、ガベージ値が含まれていないことを確認します。
  4. 最初に、指定されたパスワードを検証するためにパスワードを入力するようにユーザーに求めます。ユーザー入力を取得するには、最初にプログラムにスキャナークラスをインポートしてから、オブジェクトを作成します。スキャナーのプログラムオブジェクトでは、クラスが入力されます。
  5. スキャナー関数には、ユーザー入力を読み取り、それを文字列に格納する .nextLine() のデフォルト関数があります。
  6. 次に、すべてのパスワード文字を繰り返し、各文字を char 型の c 変数に格納します。
  7. 文字データ型には、デフォルトの関数 isUpperCaseisLowerCase、および isDigit があります。これらのデフォルト関数を使用して、パスワードに含まれる大文字と小文字、特殊記号、または数字の数を計算します。
  8. c 変数に格納されている文字が大文字の場合、uppercaseCount 変数を 1 インクリメントします。
  9. c 変数に格納されている文字が小文字の場合、lowercaseCounter 変数を 1 インクリメントします。
  10. c に格納されている文字が数字の場合、digitCounter 変数を 1 インクリメントします。
  11. c に格納されている文字が特殊記号の場合、特殊カウンターを 1 インクリメントします。
    12.その後、条件ステートメントを実行して、パスワードに@#%、小文字と大文字、数字などの指定された文字が含まれているかどうかを確認します。
    13.パスワードが指定された基準を満たしている場合、Validate password ステートメントを出力します。
    14.パスワードが条件のすべてまたは一部を満たしていない場合、最初に Your password doesn't contain the following というステートメントが表示されます。
    15.最後に、指定された条件のパスワードが満たされていないことを確認し、それに応じてメッセージを表示します。
package sampleProject;
import java.util.*;
import java.util.Scanner;

public class Codesample {
  public static void main(String[] args) {
    // Specify the maximum number of letters in a password
    final int MAX = 8;

    // Specifying the number of uppercase letters in password
    final int MIN_Uppercase = 2;
    // Specifying the minimum lowercase letters in password
    final int MIN_Lowercase = 2;
    // Specifying the number of digits in a password
    final int NUM_Digits = 2;
    // Specify the minimum number of special case letters
    final int Special = 2;
    // Count number of uppercase letters in a password
    int uppercaseCounter = 0;
    // Counter lowercase letters in a password
    int lowercaseCounter = 0;
    // Count digits in a password
    int digitCounter = 0;
    // count special case letters in a password
    int specialCounter = 0;

    // Take input of password from the user

    System.out.println("Enter the password\n");

    Scanner input = new Scanner(System.in);

    // Take password input from the user and save it in the string password

    String password = input.nextLine();

    for (int i = 0; i < password.length(); i++) {
      char c = password.charAt(i);
      if (Character.isUpperCase(c))
        uppercaseCounter++;
      else if (Character.isLowerCase(c))
        lowercaseCounter++;
      else if (Character.isDigit(c))
        digitCounter++;
      if (c >= 33 && c <= 46 || c == 64) {
        specialCounter++;
      }
    }

    if (password.length() >= MAX && uppercaseCounter >= MIN_Uppercase
        && lowercaseCounter >= MIN_Lowercase && digitCounter >= NUM_Digits
        && specialCounter >= Special) {
      System.out.println("Valid Password");
    } else {
      System.out.println("Your password does not contain the following:");
      if (password.length() < MAX)
        System.out.println(" atleast 8 characters");
      if (lowercaseCounter < MIN_Lowercase)
        System.out.println("Minimum lowercase letters");
      if (uppercaseCounter < MIN_Uppercase)
        System.out.println("Minimum uppercase letters");
      if (digitCounter < NUM_Digits)
        System.out.println("Minimum number of numeric digits");
      if (specialCounter < Special)
        System.out.println("Password should contain at lest 3 special characters");
    }
  }
}

出力:

Your password does not contain the following:
At least 8 characters
Minimum lowercase letters
Minimum, uppercase letters
Minimum number of numeric digits
Password should contain at least 3 special characters

Enter the password

DElft@#90
Valid Password