PHP – CSPRNG



CSPRNG 首字母縮寫詞代表密碼學安全的偽隨機數生成器。PHP 函式庫包含許多生成隨機數的函式。例如 -

  • mt_rand() - 透過梅森旋轉演算法隨機數生成器生成一個隨機值

  • mt_srand() - 為梅森旋轉演算法隨機數生成器播種

  • rand() - 生成一個隨機整數。

示例

以下程式碼顯示瞭如何使用函式mt_rand()生成隨機數 -

<?php
   # Generates random integer between the range
   echo "Random integer: " . rand(1,100) . PHP_EOL;
   # Generate a random value via the Mersenne Twister Random Number Generator
   echo "Random number: " . mt_rand(1,100);
?>

它將產生以下輸出 -

Random integer: 45
Random number: 86

請注意,每次執行程式碼時,輸出可能會有所不同。但是,這些函式生成的隨機數在密碼學上是不安全的,因為有可能猜測其結果。PHP 7 引入了一些生成安全隨機數的函式。

以下函式在密碼學上是安全的,是新新增的 -

  • random_bytes() - 生成密碼學安全的偽隨機位元組。

  • random_int() - 生成密碼學安全的偽隨機整數。

random_bytes() 函式

random_bytes() 生成任意長度的密碼學隨機位元組字串,適用於加密用途,例如在生成鹽、金鑰或初始化向量時。

string random_bytes ( int $length )

引數

  • length - 以位元組為單位應返回的隨機字串的長度。

該函式返回一個包含請求數量的密碼學安全隨機位元組的字串。

如果找不到合適的隨機源,則會丟擲異常。如果給出無效的引數,則會丟擲 TypeError。如果給出無效的位元組長度,則會丟擲錯誤。

示例

請檢視以下示例 -

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

它可能會產生以下輸出(每次可能不同) -

6a85eec950

random_int() 函式

random_int() 生成密碼學隨機整數,適用於需要無偏結果的情況。

int random_int ( int $min , int $max )

引數

  • min - 要返回的最低值,必須大於或等於 PHP_INT_MIN。

  • max - 要返回的最高值,必須小於或等於 PHP_INT_MAX。

該函式返回一個在 min 到 max(含)範圍內的密碼學安全隨機整數。

如果找不到合適的隨機源,則會丟擲異常。如果給出無效的引數,則會丟擲 TypeError。如果 max 小於 min,則會丟擲錯誤。

示例

請檢視以下示例 -

<?php
   print(random_int(100, 999));
   print("\n");
   print(random_int(-1000, 0));
?>

它可能會產生以下輸出(每次都不同) -

495
-563
廣告

© . All rights reserved.