「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Javaでランダム文字列を生成したい場面は多くあります。
例えば以下のような用途です。

  • 一時パスワードの発行

  • トークンやセッションIDの生成

  • サンプルデータの作成

  • ファイル名や識別子を一意にしたい場合

本記事では、英数字のみ記号含むパターン暗号学的に安全なランダム生成(SecureRandom) など、実務でよく使うパターンをまとめて解説します。


1. もっとも基本:英数字のランダム文字列を生成する方法

使用例が多い標準的パターン(Random)

特徴

  • 英数字のみのシンプルな生成

  • 速度は速く、軽量

  • ただし暗号用途には不向き(後述の SecureRandom を使うべき)


2. 記号付き(パスワード想定など)のランダム生成

記号を含めたい場合は、使う文字セットを拡張するだけで対応できます。

例:記号も含めた 20 文字のランダムパスワード


3. 暗号用途は必須:SecureRandom を使う安全な方法

API キー、トークン、認証系のランダム値は必ず SecureRandom を使用します。

特徴

  • 暗号学的に強い乱数

  • セッションID・APIキーなどの用途で必須

  • 若干処理は重くなるが実用上問題なし


4. UUID を使って簡単に一意文字列を生成する

ランダム性というより「ほぼ衝突しない文字列」がほしい場合に便利です。

特徴

  • 標準APIだけで手軽に使える

  • 衝突確率が極めて低い

  • 記号(ハイフン)が含まれる

  • 32文字固定で、用途によっては長すぎることもある


5. Apache Commons Lang を使う(実務で人気)

ライブラリに頼れる環境なら、最もスマートで保守性が高い方法です。

依存関係(Maven)

使用例

記号含めたい場合


6. Java 8 Streams を使うシンプルな書き方

ラムダでスッキリ書きたい時のパターンです。

特徴

  • Java 8 以降で動作

  • 1行で文字列生成ロジックを完結できる

  • SecureRandom との併用が安心


7. 用途別のおすすめ

用途推奨方法理由
一時パスワードRandom or SecureRandom(長め)記号含めて複雑にできるため
APIキー / トークンSecureRandom暗号用途で必須
テストデータ生成Random十分高速で簡単
重複しないIDUUID手軽で安全
コードの保守性重視Apache Commons Langチーム開発で人気

まとめ

Javaでは目的に応じて、複数のランダム文字列生成方法が選べます。

  • Random:軽量でテストデータに最適

  • SecureRandom:セキュア用途の必須選択

  • UUID:一意性が重要な場合

  • Commons Lang:コードの可読性・保守性が高い

  • Streams:Java 8 以降でスマートに書ける

実務では SecureRandom と UUID を組み合わせれば、ほとんどの要件を満たせます。

Ads by Google