如何写我自己的mt_rand()&mt_srand?

问题描述:

我有一个做大量使用mt_rand & mt_srand的应用,这个问题是很多主机商都有利,默认情况下,suhosin.mt_srand.ignore,这导致我的应用程序无法正常工作,因为没有按播种”将不起作用......如何写我自己的mt_rand()&mt_srand?

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

我看了一下rand.c(http://lxr.php.net/xref/PHP_5_4/ext/standard/rand.c),它是mt_rand()& mt_srand()的源代码,但是我对C的了解很差,并且我无法将它自己迁移到php。

有谁知道能不能做到?或者想帮助我呢?

+0

你不应该这样做。良好的随机数生成非常复杂。如果你坚持,不过,看到这个问题:http://stackoverflow.com/questions/9482290/workaround-for-suhosin-mt-srand-ignore-to-consistently-shuffle-an-array-in-php –

+0

我我已经看到了这个问题。这两个缓存和写一个不同的随机功能,也不会在我的情况下做的,因为我不能提前究竟会是每一个种子我的应用程序产生的诉说,我需要产生完全相同的结果mt_rand&mt_srand随机函数为了向后兼容而生产。 –

+0

@EdCottrell提​​到的问题在任何情况下似乎都没有世界上最伟大的PRNG。 – abligh

您可以尝试一个共同的PRNG算法,例如一个PHP中的实现https://github.com/ruafozy/php-mersenne-twister

但是,请不要依赖这些数字是加密的安全 - 这意味着使用这些如用于在游戏中生成随机迷宫,但不用于加密你的日记。