当前位置: 首页 > 面试题库 >

用PHP安全地生成随机数

阴福
2023-03-14
问题内容

用例:“我忘记了密码”按钮。我们找不到用户的原始密码,因为它以散列形式存储,因此唯一要做的就是生成一个新的随机密码,然后通过电子邮件发送给他。这就要求使用密码无法预测的随机数,而mt_rand不够好,因此通常我们不能假定托管服务将提供对操作系统的访问权以安装密码随机数模块等。因此,我在寻找一种方法在PHP本身中生成安全的随机数。

到目前为止,我提出的解决方案包括存储初始种子,然后针对每个调用,

result = seed
seed = sha512(seed . mt_rand())

这基于sha512哈希函数的安全性(mt_rand调用只会使获得数据库副本的对手的生活更加艰难)。

我是否缺少某些东西,或者有更知名的解决方案?


问题答案:

您还可以考虑使用OpenSSL openssl_random_pseudo_bytes,该版本自PHP 5.3起可用。

 string openssl_random_pseudo_bytes ( int $length [, bool &$crypto_strong ] )

生成一串伪随机字节,其字节数由length参数确定。它还指示是否使用了加密功能强的算法来生成伪随机字节,并通过可选的crypto_strong参数来执行此操作。很少会出现FALSE,但是某些系统可能已损坏或过旧。

从PHP 7开始,还有random_bytes可用的功能

string random_bytes ( int $length )


 类似资料:
  • 问题内容: PHP的函数不能提供良好的随机数。因此,我开始使用据说效果更好的产品。但是这些结果有多好?有什么方法可以再次改善它们? 我的点子: 这应该给您“完美的”随机数,不是吗? 问题答案: 伪随机数生成器(PRNG)是非常复杂的野兽。 没有真正的“完美”随机数生成器-实际上,可以通过数学函数完成的最好的操作是伪随机数-对于大多数意图和目的,它们似乎足够随机。 实际上,从PRNG返回的数字中执行

  • 我的任务: 生成1到20之间的随机数,小数点后1位。 然而,我的问题就像mt_rand一样简单。我希望大多数生成的数字较低,大约0.5-4.5,偶尔的数字在4.5-10之间,很少说每12-20小时一次在10-20之间。 我一直在使用以下内容,但不知道从哪里开始。我是一个很基本的自学程序员。 也许如果我简单地解释一下为什么我想要这个,它可能会有帮助… 我拥有一个在线游戏,想要添加3个“银行”与每个银

  • 我需要在我的脚本中生成大约5000个随机数,但是CPU速度太快了,我看到了随机数的趋势。 例如,在第一次迭代的100次中,我用rand(0100)得到了80个介于70和99之间的值;,这真的很不方便。 有没有办法解决这样的问题,或者说,在2012年,随机性已经无法实现了? 我相信有可能从一个执行随机次数的函数中生成随机数。。。但我想不出一个。

  • 下面简单脚本并行产生随机数 在使用单个线程时,上述脚本是确定性 然而,当使用多个线程时,它是部分随机,且包含线程之间的相关性(这可能是一个相当大的问题 我明白为什么我的代码不是线程安全的,但我不明白如何使它是线程安全的。是否可以不考虑线程的数量而具有确定性的输出? 目标是使产生与相同的输出(即线程数不会影响对象)。如果这不可能,则目标是产生与相同的输出。

  • 本文向大家介绍Python生成随机MAC地址,包括了Python生成随机MAC地址的使用技巧和注意事项,需要的朋友参考一下 利用python代码生成一个随机的MAC地址,使用python网络编程时或可用上,如果使用scapy模块则可直接利用RandMAC()函数来生成MAC。 python 下列的Fake_HW是用struct打包成二进制格式的mac地址 以上就是本文的全部内容了,希望大家能够喜欢

  • 本文向大家介绍PHP 生成随机字符串,包括了PHP 生成随机字符串的使用技巧和注意事项,需要的朋友参考一下 要使用PHP生成随机字符串,代码如下- 示例 输出结果 示例 现在让我们来看另一个示例- 输出结果