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
广告