首字母缩略词 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
随机数: 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() 函数返回一个加密安全的随机整数,范围为 min 到 max(包括 min 到 max)。
如果找不到合适的随机性来源,将引发 Exception。如果给出了无效的参数,将抛出 TypeError。如果 max 小于 min,将引发 Error。
例子
请看下面的例子 -
<?php
print(random_int(100, 999));
print("\n");
print(random_int(-1000, 0));
?>
它可能会产生以下输出(每次都不同)-
585
-474
-474