openssl_random_pseudo_bytes

疑似ランダムなバイト文字列を生成する

説明

string openssl_random_pseudo_bytes(int $length, bool &$strong_result = null)

疑似ランダムなバイト文字列を生成します。長さは length パラメータで指定します。

暗号学的に強いアルゴリズムを使って疑似乱数を生成したかどうかを知ることもできます。 オプションのパラメータ strong_result を使います。 これが false になることはまずないでしょうが、 古いシステムなどではそうなることもあります。

パラメータ

length

希望するバイト長。 2147483647 以下の正の整数でなければなりません。 PHP は、 このパラメータを非 null の整数値にキャストして利用します。

strong_result

これを渡しておくと、使ったアルゴリズムが暗号学的に強いものであるかどうかを表す bool 値が格納されます。「強い」とは、 GPG やパスワードなどに使っても安全であるという意味です。強い場合は true、そうでない場合は false となります。

戻り値

成功した場合は指定したバイト長の string を返します。

エラー / 例外

openssl_random_pseudo_bytes は、 失敗した場合に Exception をスローします。

変更履歴

バージョン 説明
8.0.0 strong_result は、nullable になりました。
7.4.0 この関数は、失敗時に false を返さなくなりました。 代わりに Exception をスローするようになっています。

例1 openssl_random_pseudo_bytes の例

<?php
for ($i = 1; $i <= 4; $i++) {
    $bytes = openssl_random_pseudo_bytes($i, $cstrong);
    $hex   = bin2hex($bytes);

    echo "Lengths: Bytes: $i and Hex: " . strlen($hex) . PHP_EOL;
    var_dump($hex);
    var_dump($cstrong);
    echo PHP_EOL;
}
?>

上の例の出力は、 たとえば以下のようになります。

Lengths: Bytes: 1 and Hex: 2
string(2) "42"
bool(true)

Lengths: Bytes: 2 and Hex: 4
string(4) "dc6e"
bool(true)

Lengths: Bytes: 3 and Hex: 6
string(6) "288591"
bool(true)

Lengths: Bytes: 4 and Hex: 8
string(8) "ab86d144"
bool(true)

参考

  • random_bytes
  • bin2hex
  • crypt
  • random_int