Javaでランダムパスワードを生成する

Javaでランダムパスワードを生成する

Javaでjava.util.Randomクラスを使用してパスワードを生成します。

12文字のランダムパスワードを生成します。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Hoge {

  private static int COUNT = 12;

  public static void main(String[] args) {
    final StringBuilder sb = new StringBuilder(
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%");
    final Random rand = new Random();
    final StringBuilder password = new StringBuilder();
    IntStream.rangeClosed(0, 11).forEach(i -> {
      final int num = rand.nextInt(sb.length());
      password.append(sb.charAt(num));
    });
    System.out. println(password); // qQYXxQFxZEaB
  }
}

ランダム12文字の文字列が生成されました。

条件付き(正規表現)

  • 小文字アルファベットを含む
  • 大文字アルファベットを含む
  • 数字を含む
  • 記号を含む

この条件を満たすパスワードを生成します。

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;

public class Hoge {

  public static void main(String[] args) {

    String password = null;
    boolean a = true;
    while (a) {
      final List<Boolean> checks = new ArrayList<>();
      password = pass(); // pass生成
      checks.add(password.matches(".*[a-z].*"));
      checks.add(password.matches(".*[A-Z].*"));
      checks.add(password.matches(".*[0-9].*"));
      checks.add(password.matches(".*[!#$%].*"));
      a = !checks.stream().allMatch(e -> e.equals(Boolean.TRUE));
      System.out.println(password);
    }
  }

  public static String pass() {
    final StringBuilder sb = new StringBuilder(
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%");
    final StringBuilder password = new StringBuilder();
    final Random rand = new Random();
    IntStream.rangeClosed(0, 11).forEach(i -> {
      final int num = rand.nextInt(sb.length());
      password.append(sb.charAt(num));
    });
    return password.toString();
  }
}

Apache CommonsのRandomStringUtilsクラスでもランダム生成できるようです。

その他条件(正規表現)

その他、条件です。

コード 内容
password.matches(“.@.“); @を含む
password.matches(“^[A-Za-z0-9][.]$”); 1文字目が英数字、2文字目がドットで終わる文字列
password.matches(“^\.[A-Za-z0-9].*$”); ドットから始まる任意の英数字の文字列
password.matches(“^.{4,18}$”) 4文字以上18文字以下

参考サイト

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました