Php 简明教程

PHP – CSPRNG

CSPRNG 的缩写代表密码安全伪随机数生成器。PHP 函数库包含了许多用于生成随机数的函数。例如:

  1. mt_rand() − 通过 Mersenne Twister 随机数生成器生成一个随机值

  2. mt_srand() − 设置 Mersenne Twister 随机数生成器的种子

  3. rand() − 生成一个随机整数。

Example

以下代码演示了如何使用函数 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);
?>

它将生成以下 output

Random integer: 45
Random number: 86

请注意,每次执行代码时输出可能不同。但是由这些函数生成的随机数并非密码安全,因为可能会猜出其结果。PHP 7 引入了几个生成安全随机数的函数。

以下函数具有加密安全性,是新添加的 -

  1. random_bytes() − 生成具有加密安全性的伪随机字节。

  2. random_int() − 生成具有加密安全性的伪随机整数。

The random_bytes() Function

random_bytes() 生成任意长度的加密随机比特串,该串适合用于加密用途,例如生成哈希盐、密钥或初始化向量时。

string random_bytes ( int $length )

Parameters

  1. length − 应返回的随机字符串的长度(单位为字节)。

该函数返回一个包含请求数量的加密安全随机比特串的字符串。

如果找不到适当的随机性来源,将抛出一个 Exception。如果给定无效的参数,将抛出一个 TypeError。如果给定了无效的字节长度,将抛出一个 Error。

Example

请看以下示例:

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

它可能生成以下 output (每次可能不同) -

6a85eec950

The random_int() Function

random_int() 生成加密随机整数,适用于在公正结果极其重要的场景下使用。

int random_int ( int $min , int $max )

Parameters

  1. min − 要返回的最小值,该值必须为 PHP_INT_MIN 或更高。

  2. max − 要返回的最大值,该值必须小于或等于 PHP_INT_MAX。

该函数返回一个在 min 到 max 范围内的加密安全随机整数(包含边界值)。

如果找不到适当的随机性来源,将抛出一个 Exception。如果给定无效的参数,将抛出一个 TypeError。如果 max 小于 min,将抛出一个 Error。

Example

请看以下示例:

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

它可能生成以下 output (每次不同) -

495
-563