random_bytes

関数の概要

PHPの random_bytes 関数は、安全な暗号論的擬似乱数バイト列を生成するために使われます。セキュリティが重要な状況で、予測不可能なランダムなバイト列を取得したい場合に非常に便利です。例えば、パスワードリセットトークンの作成やセッションIDの生成などに利用されます。

パラメータの説明

  • int $length : 取得したいバイト数を指定します。1以上の整数でなければなりません。

戻り値

length で指定したバイト数のランダムなバイト列(バイナリ文字列)を返します。失敗すると Exception をスローします。

使用例

基本的な使い方

<?php
// 16バイトのランダムなバイト列を取得
$bytes = random_bytes(16);
echo bin2hex($bytes); // バイナリを16進数表現に変換して表示
?>

この例では16バイトの安全な乱数を取得し、わかりやすく16進数で出力しています。トークンやキーの生成によく使われます。

ランダムなトークン文字列の生成

<?php
function generateToken(int $length = 32): string {
    return bin2hex(random_bytes($length));
}

$token = generateToken(16);
echo $token; // 32文字の16進数トークンが生成される
?>

ここでは関数を作り、指定したバイト数分の乱数からトークン文字列を生成しています。パスワードリセット用のトークンなどに利用可能です。

パスワードのソルト生成に利用

<?php
$salt = random_bytes(22);
$encodedSalt = base64_encode($salt);
echo 'Salt: ' . $encodedSalt;
?>

パスワードのハッシュ化前に固有のソルトを用意する際に random_bytes を使う例です。生成した生のバイト列はエンコードして保存または表示します。

関連する関数

  • random_int : 安全な整数の乱数を生成します。
  • openssl_random_pseudo_bytes : 古い環境向けの安全な乱数生成関数(非推奨のこともあります)。
  • bin2hex : バイナリデータを16進数文字列に変換します。

まとめ

random_bytes はPHPで安全にランダムなバイト列を生成するための標準関数です。セキュリティ関連の用途で信頼性が高く、使い方もシンプルです。トークン生成やパスワードソルトの作成など、実務で幅広く利用できるため、覚えておくと便利な関数です。