PHP – CSPRNG(随机数生成器)


首字母缩略词 CSPRNG 代表加密安全伪随机数生成器。PHP 函数库包含许多生成随机数的函数。例如 -

函数 描述
mt_rand() 通过 Mersenne Twister 随机数生成器生成随机值
mt_srand() 为 Mersenne Twister 随机数生成器设定种子
rand() 生成一个随机整数。

例子

以下代码显示了如何使用函数 mt_rand() 生成随机数 -


<?php
   # 生成范围内的随机整数
   echo "随机整数: " . rand(1,100) . PHP_EOL;
   # 通过Mersenne Twister随机数生成器生成随机值
   echo "随机数: " . mt_rand(1,100);
?>

它将产生以下输出 -

随机整数: 88
随机数: 91

请注意,每次执行代码时,输出可能会有所不同。但是,这些函数生成的随机数在加密上并不安全,因为可以猜测它们的结果。PHP 7 引入了几个生成安全随机数的函数。

新添加了以下加密安全的函数 -

函数 描述
random_bytes() 生成加密安全的伪随机字节。
random_int() 生成加密安全的伪随机整数。

random_bytes() 函数

random_bytes() 生成一个任意长度的加密随机字节字符串,这些字节适合加密使用,例如在生成盐、密钥或初始化向量时。


 string random_bytes ( int $length )

参数

参数 描述
length  应返回的随机字符串的长度(以字节为单位)。

random_bytes() 函数返回一个字符串,其中包含请求的加密安全随机字节数。

如果找不到合适的随机性来源,将引发 Exception。如果给出了无效的参数,将抛出 TypeError。如果给出的字节长度无效,则会引发 Error

例子

请看下面的例子 -


<?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

random_int() 函数返回一个加密安全的随机整数,范围为 minmax(包括 minmax)。

如果找不到合适的随机性来源,将引发 Exception。如果给出了无效的参数,将抛出 TypeError。如果 max 小于 min,将引发 Error

例子

请看下面的例子 -


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

它可能会产生以下输出(每次都不同)-

585
-474