【问题标题】:How to write my own mt_rand() & mt_srand?如何编写我自己的 mt_rand() 和 mt_srand?
【发布时间】:2023-03-28 14:06:01
【问题描述】:

我有一个大量使用 mt_rand 和 mt_srand 的应用程序,问题是许多主机提供商默认启用 suhosin.mt_srand.ignore,这导致我的应用程序无法正常工作,因为播种没有不行……

由于我的应用程序已经在一些托管服务器上运行(不启用此扩展),我想在 php 中创建自己的 mt_rand 和 mt_srand 函数,并让它们返回 same 结果(对于相同的种子)作为内置函数,这样我就不会依赖主机提供商是否启用了这个扩展。

我看过 rand.c (http://lxr.php.net/xref/PHP_5_4/ext/standard/rand.c),这是 mt_rand() & mt_srand() 的源代码,但是我对 C 的了解很差,不能自己迁移到 php .

有人知道怎么做吗?还是想帮我解决这个问题?

【问题讨论】:

  • 你不应该这样做。好的随机数生成是极其复杂的。但是,如果您坚持,请参阅以下问题:stackoverflow.com/questions/9482290/…
  • 我已经看过这个问题了。在我的情况下,缓存和编写不同的随机函数都不会这样做,因为我无法提前知道我的应用程序产生的每个种子是什么,我需要一个产生与 mt_rand 和 mt_srand 完全相同的结果的随机函数生产,以实现向后兼容性。
  • @EdCottrell 提到的问题在任何情况下似乎都没有世界上最伟大的 PRNG。

标签: php c suhosin code-migration


【解决方案1】:

您可以尝试使用仅 PHP 实现的常见 PRNG 算法,例如https://github.com/ruafozy/php-mersenne-twister

但是,请不要依赖这些数字来保证加密安全 - 意思是使用这些数字,例如用于在游戏中生成随机迷宫,但不能用于加密您的日记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多