Java Tips | 実務ユーティリティ:パスワード生成

Java Java
スポンサーリンク
スポンサーリンク

なぜ「パスワード生成ユーティリティ」が業務で重要なのか

業務システムでは、ユーザーアカウント、APIキー、一時的な初期パスワード、管理者用の秘密情報など、さまざまな場面で「安全なパスワード」を生成する必要があります。 しかし、ここで「なんとなくランダムっぽい文字列」を作ってしまうと、攻撃者から見れば簡単に推測できる弱いパスワードになってしまいます。

安全なパスワード生成には、セキュリティの観点から守るべきルールがいくつかあります。 それをきちんとユーティリティとしてまとめておくことで、どの機能からも同じ品質のパスワードを生成できるようになり、システム全体の安全性が底上げされます。

ここでは、プログラミング初心者向けにステップバイステップで考えながら、実務で通用するパスワード生成ユーティリティを解説していきます。

ステップ1:安全な乱数とは何かを理解する

「Random」ではなく「SecureRandom」を使う理由

Java には java.util.Randomjava.security.SecureRandom という二つの乱数クラスがあります。 見た目にはどちらも「ランダムな値」を返してくれますが、セキュリティの観点ではまったく違います。

Random は統計的にはそれなりにランダムですが、「次の値を予測しようとする攻撃」に対して弱いです。 一方 SecureRandom は、暗号用途向けに設計されており、攻撃者が乱数のパターンを推測しにくいようになっています。

パスワード生成は「攻撃者に推測されたくない値」を作る処理なので、必ず SecureRandom を使うべきです。

ステップ2:どんな文字を使うか(文字集合)を決める

大文字・小文字・数字・記号をどう組み合わせるか

パスワードの強さは「長さ」と「使う文字の種類」で決まります。 例えば、数字だけの 8 桁よりも、大文字・小文字・数字・記号を混ぜた 12 桁の方が圧倒的に強くなります。

実務では、次のような文字集合をよく使います。

英大文字(A〜Z) 英小文字(a〜z) 数字(0〜9) 記号(!@#$%^&* など)

ただし、記号はシステムや連携先によって許可される種類が違うため、プロジェクトごとに「使ってよい記号」を決めておく必要があります。

ステップ3:基本的なパスワード生成コードを書く

SecureRandom と文字集合を組み合わせる

まずは、シンプルなパスワード生成ユーティリティを見てみます。

import java.security.SecureRandom;

public class PasswordGenerator {

    private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
    private static final String DIGITS = "0123456789";
    private static final String SYMBOLS = "!@#$%^&*";

    private static final String ALL = UPPER + LOWER + DIGITS + SYMBOLS;

    private static final SecureRandom RANDOM = new SecureRandom();

    public static String generate(int length) {
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int index = RANDOM.nextInt(ALL.length());
            sb.append(ALL.charAt(index));
        }
        return sb.toString();
    }
}
Java

使い方の例としては、次のようになります。

String password = PasswordGenerator.generate(12);
System.out.println(password);
Java

ここで重要なのは、「乱数でインデックスを選び、その位置の文字を取り出す」というシンプルな構造です。 この形を理解しておくと、文字集合を変えたり、長さを変えたりするのが簡単になります。

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