📜  PHP 7-CSPRNG(1)

📅  最后修改于: 2023-12-03 15:03:34.241000             🧑  作者: Mango

PHP 7-CSPRNG

随机数生成对于计算机编程来说至关重要,特别是在密码学和安全领域中。而 CSPRNG(Cryptographically Secure Pseudo Random Number Generator,加密安全伪随机数生成器)是用于加密和安全应用程序中的随机数生成器。在 PHP 7 中,内置了对 CSPRNG 的支持。本文将为您介绍 PHP 7 中的 CSPRNG。

CSPRNG 原理

传统的伪随机数生成器(PRNG)生成的数列是一组满足统计学要求但缺乏加密安全性的伪随机数,而 CSPRNG 生成的数列满足以下要求:

  • 输出的数列具有真正的随机性,不可预测,不可重现;
  • 生成的数列通过统计学测试和安全性分析得出的结果,具有足够的随机性;
  • 生成的数列不可预测,不能通过特定的算法和数学公式来猜测输出。

CSPRNG 上的算法应该满足这些需求,并且应该很难被攻击者发现算法并且产生可利用的结果。

PHP 7 内置的 CSPRNG 实现了 random_bytes() 函数和 random_int() 函数。

random_bytes()

random_bytes() 函数用于生成指定长度的随机字节序列,返回原始二进制数据。

$random_bytes = random_bytes(16); // 生成一个16字节长度的随机字节序列
echo bin2hex($random_bytes);

输出的结果类似于:

9a893f8bb9721fd337fd7212a7e328e6
random_int()

random_int() 函数用于生成指定范围内的随机整数。

$random_int = random_int(1, 6); // 生成 1-6 之间的任意一个整数
echo $random_int;

输出的结果类似于:

5
安全漏洞

考虑到 CSPRNG 应用于加密、密码学和安全领域,任何与生成随机数的漏洞会导致安全研究未经授权地获取机密数据或篡改数据。在 PHP 5.2.0 和 PHP 5.3.0 版本中,所使用的随机数生成器不是可信的 CSPRNG 实现,并且可能被推迟。在 PHP 5.3.0 之后,mcrypt_create_iv() 函数用上了可信的 CSPRNG 生成随机数。在 PHP 7 中,random_bytes()random_int() 函数作为内置函数来进行 CSPRNG,是一个安全的选择。

总结

在 PHP 7 中使用 CSPRNG 生成随机数,是一个安全的选择,因为 CSPRNG 生成的数列具有真正的随机性,不可预测,不可重现。 PHP 7 可以使用内置函数 random_bytes()random_int() 来生成随机数。当您需要进行密码学或其他安全性相关的任务时,可使用 CSPRNG 来确保随机数的高度安全性。