使用PHP进行认证的随机数生成器

时间:2013-01-25 11:41:54

标签: php linux php-extension

我会试着解释我的问题,如果不是具体的解决方案,但至少理论上的想法会很好。

我正在编写随机数生成器--RNG(仅在Linux(Ubuntu)服务器上运行)并且此代码将被认证(代码/程序随时可以使用sha1 / md5哈希进行检查,并且必须经过认证版本或类似的东西) 所以它将无法再进行更改。基本上我使用mt_rand函数生成值和几个服务器参数,并microtime用于种子(mt_srand)。如果代码足够好用于认证,仍然不会,但这不是主要问题。 认证公司说我将被要求提供mt_rand函数的源代码和二进制代码(也可能是mt_srand)。那么如何以最简单正确的方式做到这一点?

php_src_files\ext\standard\rand.c中找到mt_rand函数 所以我应该编译这个扩展并加载到安装的PHP作为扩展名?

我不是php和linux的新手,但我想问一下如何正确行事,所以我不会头疼 在不同的Linux服务器上部署此RNG。

提前致谢。

更新:感谢您的回复,但正如我所说,我不是在询问,如何编写RNG,而是如何提取/编译/准备/使用部分php源进行认证。 ..

3 个答案:

答案 0 :(得分:2)

在Linux上,您可以从/dev/random读取,它会从环境噪声中产生高质量的随机位。所以这可能会为你服务:

function dev_random_integer($min, $max)
{
    $stream = fopen('/dev/random', 'r');
    $randomBinary = fread($stream, 4); // read 4 bytes (32 bit)
    fclose($stream);
    $randomInt = unpack('l', $randomBinary); // convert to 32 bit integer

    $range = $max - $min + 1;
    return $min + ($randomInt % $range);
}

编辑:你不应该使用那些确切的代码,请看下面的评论。

答案 1 :(得分:0)

您必须提供完整的PHP源代码和二进制PHP包(php-cli),可用于生成二进制流,以便根据各种工具进行检查。 (您可能会问您的认证提供商他们支持哪种操作系统。)

答案 2 :(得分:0)

尽管这是一个古老的问题,但似乎是一个相关的问题。

我最近制作了一个赌场游戏,并使用了Zend/Math/Rand,该游戏提供了加密安全的RNG。通过了RNG认证测试,我的游戏现已通过认证!

看看我在上面写的article