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(".*[1-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クラスでもランダム生成できるようです。

参考サイト

コメント

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