【问题标题】:Distribution of php's random_int() functionphp的random_int()函数分布
【发布时间】:2016-08-20 20:25:56
【问题描述】:

php的random_int函数的分布是什么?

我想这归结为getrandom(2)/dev/urandom 的分布?它们是如何分布的?

random_int 可以用于均匀分布的随机数生成器吗?

【问题讨论】:

  • 来自 PHP 文档:“生成适用于无偏结果至关重要的加密随机整数”。据此,我假设分布是均匀的。毕竟,如果 random_int/dev/urandom 不统一,那将毫无意义,因为可以说从统一的分布中生成其他分布的随机数据比另一种方式更容易。
  • 如果它对你很重要,你为什么不测试一下呢?假设您需要特定的分布,那么这将是生成映射函数的第一步。
  • @symcbean 对一般概念比对我的特定环境的测试更感兴趣,因为从我的理解来看,随机性可能是特定于硬件的。

标签: php unix random


【解决方案1】:

来自random_int的php手册:

在 Windows 上,CryptGenRandom() 将始终被使用。
在 Linux 上,如果可用,将使用 getrandom(2) 系统调用。
在其他平台上,将使用 /dev/urandom。

这意味着发行版依赖于操作系统...
所以,我认为回答最初的问题'php的random_int函数的分布是什么?'并不是那么容易。在Linux上,例如,从a discussionint getrandom(void *buf, size_t buflen, unsigned int flags);

[...] The GRND_RANDOM flag bit can be used to switch to the /dev/random pool, subject to the entropy requirements of that pool [...]

因此,基于不同的运行时参数,随机分布在相同操作系统中可能会有所不同...

【讨论】:

  • 我认为分布不会有所不同,因为/dev/random/dev/urandom 很可能使用相同的随机源。
  • 好吧,我在询问之前阅读了那部分文档。这就是为什么我添加它可能归结为 getrandom(2) 或 /dev/urandom。可能应该询问有关 getrandom(2) 和 /dev/urandom 的分布 :)。所以它依赖于操作系统的部分是正确的。但是也许可以给出关于 urandom 和 getrandom(2) 分布的答案?或者甚至可以改变不同的硬件“随机硬件噪音”足以改变分布?
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多