(PHP 7, PHP 8)
random_bytes — 取得密碼學安全隨機位元組
產生一個包含指定 長度
的均勻選取隨機位元組的字串。
由於返回的位元組是完全隨機選擇的,因此產生的字串可能包含不可列印的字元或無效的 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 7.0 中新增的,但 PHP 5.2 至 5.6(含)可以使用 » 使用者空間實作。
length
應回傳的隨機字串長度,以位元組為單位;必須大於或等於 1
。
一個包含所請求數量之加密安全隨機位元組的字串。
length
的值小於 1
,則會拋出 ValueError。
版本 | 說明 |
---|---|
8.2.0 | 如果 CSPRNG 失敗,此函數現在會拋出 Random\RandomException。先前會拋出普通的 Exception。 |
範例 #1 random_bytes() 範例
<?php
$bytes = random_bytes(5);
var_dump(bin2hex($bytes));
?>
上述範例的輸出會類似如下:
string(10) "385e33f741"