PHP Conference Japan 2024

random_bytes

(PHP 7, PHP 8)

random_bytes取得密碼學安全隨機位元組

說明

random_bytes(int $length): string

產生一個包含指定 長度 的均勻選取隨機位元組的字串。

由於返回的位元組是完全隨機選擇的,因此產生的字串可能包含不可列印的字元或無效的 UTF-8 序列。在傳輸或顯示之前,可能需要對其進行編碼。

此函數產生的隨機性適用於所有應用程式,包括產生長期使用的密鑰,例如加密金鑰。

隨機性來源的優先順序如下:

  • Linux:» getrandom()/dev/urandom

  • FreeBSD >= 12 (PHP >= 7.3):» getrandom()/dev/urandom

  • Windows (PHP >= 7.2):» CNG-API

    Windows:» CryptGenRandom

  • macOS (PHP >= 8.2;>= 8.1.9;>= 8.0.22 如果編譯時可使用 CCRandomGenerateBytes):CCRandomGenerateBytes()

    macOS (PHP >= 8.1;>= 8.0.2):arc4random_buf(),/dev/urandom

  • NetBSD >= 7 (PHP >= 7.1;>= 7.0.1):arc4random_buf(),/dev/urandom

  • OpenBSD >= 5.5 (PHP >= 7.1;>= 7.0.1):arc4random_buf(),/dev/urandom

  • DragonflyBSD (PHP >= 8.1):» getrandom()/dev/urandom

  • Solaris (PHP >= 8.1):» getrandom()/dev/urandom

  • 任何前面未提及的操作系統和 PHP 版本組合:/dev/urandom
  • 如果沒有可用的來源或所有來源都無法產生隨機性,則會拋出 Random\RandomException

注意雖然此函數是在 PHP 7.0 中新增的,但 PHP 5.2 至 5.6(含)可以使用 » 使用者空間實作

參數

length

應回傳的隨機字串長度,以位元組為單位;必須大於或等於 1

回傳值

一個包含所請求數量之加密安全隨機位元組的字串。

錯誤/例外

更新日誌

版本 說明
8.2.0 如果 CSPRNG 失敗,此函數現在會拋出 Random\RandomException。先前會拋出普通的 Exception

範例

範例 #1 random_bytes() 範例

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

上述範例的輸出會類似如下:

string(10) "385e33f741"

參見

新增筆記

使用者貢獻的筆記

此頁面尚無使用者貢獻的筆記。
To Top