openssl_random_pseudo_bytes

関数の概要

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() の使用が推奨されているため、可能であればそちらも検討しましょう。実務ではトークン生成やパスワード管理に欠かせない関数の一つです。