関数の概要
openssl_random_pseudo_bytesは、PHPで暗号学的に安全な疑似ランダムバイト列を生成する関数です。主にセキュリティ目的で使われ、トークン生成やパスワードのソルトなど、ランダム性が重要な場面で利用されます。
パラメータの説明
length(必須): 生成するバイト列の長さを整数で指定します。&$crypto_strong(省略可能): ここにブール値が返されます。強い暗号的擬似乱数かどうかを示し、真の場合は安全なランダム生成が行われています。falseの場合は安全性が保証されません。
戻り値
指定したバイト数のランダムなバイト列を含む文字列を返します。失敗した場合は FALSE を返します。
使用例
基本的な使い方
<?php
$bytes = openssl_random_pseudo_bytes(16);
echo bin2hex($bytes);
?>
16バイトのランダムなデータを生成し、16進数に変換して出力します。トークンや鍵の生成に使えます。
強い乱数かどうかを判定する例
<?php
$crypto_strong = false;
$bytes = openssl_random_pseudo_bytes(16, $crypto_strong);
if ($crypto_strong) {
echo "安全な乱数が生成されました: " . bin2hex($bytes);
} else {
echo "警告: 安全な乱数が生成されませんでした。";
}
?>
生成された乱数が強力な暗号乱数かどうかを確認し、安全でない場合には警告を表示します。
トークン生成に利用する例
<?php
function generateToken($length = 32) {
$crypto_strong = false;
$bytes = openssl_random_pseudo_bytes($length, $crypto_strong);
if (!$crypto_strong) {
throw new Exception("安全な乱数生成に失敗しました。");
}
return bin2hex($bytes);
}
try {
$token = generateToken(16);
echo "生成されたトークン: " . $token;
} catch (Exception $e) {
echo $e->getMessage();
}
?>
安全なランダムトークンを生成する関数例です。乱数が安全でない場合は例外を投げて処理を中断します。
関連する関数
random_bytes()– PHP7以降推奨のより安全なランダムバイト列生成関数mt_rand()– 高速だが暗号学的に安全でない疑似乱数生成bin2hex()– バイナリデータを16進数文字列に変換する関数
まとめ
openssl_random_pseudo_bytesはPHPで安全な疑似ランダムバイト列を生成するための便利な関数です。ランダム性の強度を確認できるため、セキュリティの高い目的にも使えます。ただし、PHP7以上では random_bytes() の使用が推奨されているため、可能であればそちらも検討しましょう。実務ではトークン生成やパスワード管理に欠かせない関数の一つです。
