PHPで乱数を生成する場合さまざまな方法があるが、今回はパスワードやトークンなどで利用するためのセキュアな乱数を生成する方法を紹介する。

暗号論的擬似乱数生成器を利用する

PHP7から使えるrandom_bytes関数は、暗号論的擬似乱数生成器を用いてセキュアな乱数を生成する関数で、引数に指定したバイト長をもとに疑似ランダムなバイト列を生成する。

$TOKEN_LENGTH = 32;
$bytes = random_bytes($TOKEN_LENGTH);
$token = bin2hex($bytes);

生成したバイト列は、bin2hex関数を使って16進数に変換することで実際に使用することになる。

なお、PHP5以前ではrandom_bytes関数が用意されていないため、代わりにopenssl_random_pseudo_bytes関数を使用する。

$TOKEN_LENGTH = 32;
$bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH);
$token = bin2hex($bytes);