Java Tips | 実務ユーティリティ:ランダム文字列生成

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

なぜ「ランダム文字列生成ユーティリティ」が業務で役に立つのか

業務システムでは、ちょっとした「ランダム文字列」が頻繁に必要になります。 一時的なトークン、ファイル名のユニーク化、セッションID、検証コード、CSRFトークン、招待コードなど、用途はかなり広いです。 そのたびに場当たり的に Math.random() を使ったり、適当に UUID を文字列化したりしていると、コードがバラバラになり、強度や形式も統一されません。

そこで「ランダム文字列生成ユーティリティ」を用意しておくと、 どの機能からも同じルールでランダム文字列を生成できるようになり、 セキュリティ面でも、保守性の面でも、かなり楽になります。

ここでは、プログラミング初心者向けにステップバイステップで考えながら、 実務で使えるランダム文字列生成ユーティリティを丁寧に解説していきます。

ステップ1:乱数の種類を理解する

Random と SecureRandom の違いを押さえる

まず、「ランダム文字列」を作るためには「乱数」が必要になります。 Java には java.util.Randomjava.security.SecureRandom という二つの代表的な乱数クラスがあります。

Random は、ゲームや簡単なシャッフルなど「セキュリティを気にしない用途」には十分ですが、 乱数のパターンを解析されると、次に出てくる値をある程度予測されてしまう可能性があります。

一方 SecureRandom は、暗号用途向けに設計されており、 攻撃者が乱数のパターンを推測しにくいようになっています。

業務でランダム文字列を使う場面は、 「トークン」「検証コード」「セッションID」など、セキュリティに関わるものが多いため、 基本的には SecureRandom を使うことをおすすめします。

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

英数字だけか、記号も含めるかを用途ごとに考える

ランダム文字列の「見た目」は、使う文字集合によって決まります。 例えば、次のようなパターンがあります。

英数字だけ(A〜Z、a〜z、0〜9) 英小文字と数字だけ(a〜z、0〜9) 英大文字だけ(A〜Z) 記号も含める(!@#$%^&* など)

用途によって、許可される文字が違います。 URLに埋め込むトークンなら「URLで安全な文字だけ」にした方がよいですし、 人間が手入力する検証コードなら「紛らわしい文字(Oと0、Iと1など)を避ける」方がよいです。

まずは、汎用的な「英数字」の文字集合を用意してみます。

private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
private static final String DIGITS = "0123456789";

private static final String ALPHANUM = UPPER + LOWER + DIGITS;
Java

このようにしておくと、「英数字だけのランダム文字列」を簡単に作れるようになります。

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