random_bytes

(PHP 7, PHP 8)

random_bytes暗号学的にセキュアな、ランダムなバイト列を生成する

説明

random_bytes(int $length): string

ソルトやキーや初期化ベクトルのような、暗号化の用途に合った、 暗号学的にランダムなバイト列を任意の長さの文字列として生成します。

この関数が使う不規則性のソースは次のとおりです。

  • Windows では、常に » CryptGenRandom() を使います。PHP 7.2.0 以降は、常に » CNG-API を使うようになりました。
  • Linux では、システムコール » getrandom(2) があればそれを使います。
  • その他のプラットフォームでは、 /dev/urandom を使います。
  • これらがいずれも使えない場合は、 Random\RandomException をスローします。

注意: この関数は PHP 7.0 で追加されたものですが、PHP 5.2 から 5.6 までのバージョンで使える » ユーザーランドの実装 も公開されています。

パラメータ

length

返すべきランダムな文字列の長さをバイト単位で指定します。 1 以上でなければなりません。

戻り値

暗号学的にセキュアなランダムなバイト列を含んだ文字列を返します。

エラー / 例外

  • 適切な不規則性のソースが見つからない場合は Random\RandomException をスローします。
  • 不正な length が指定されると、 Error がスローされます。

変更履歴

バージョン 説明
8.2.0 CSPRNG が失敗した場合に、 Random\RandomException をスローするようになりました。 これより前のバージョンでは、Exception をスローしていました。

例1 random_bytes() の例

<?php
$bytes
= random_bytes(5);
var_dump(bin2hex($bytes));
?>

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

string(10) "385e33f741"

参考

add a note

User Contributed Notes 1 note

up
5
ccbsschucko at gmail dot com
4 years ago
<?php
   
function str_rand(int $length = 64){ // 64 = 32
       
$length = ($length < 4) ? 4 : $length;
        return
bin2hex(random_bytes(($length-($length%2))/2));
    }
   
   
var_dump(str_rand());
   
// d6199909d0b5fdc22c9db625e4edf0d6da2b113b21878cde19e96f4afe69e714
?>
To Top