2

我会尝试解释我的问题,如果不是具体的解决方案,但至少理论上的想法就足够了。

我正在编写随机数生成器 - RNG(将仅在 Linux(Ubuntu)服务器上运行)并且此代码将被认证(代码/程序随时可以使用 sha1/md5 哈希检查,它有很多认证版本或其他东西像那样),因此它将无法再进行更改。基本上我使用mt_rand函数来生成值和几个服务器参数以及microtime种子(mt_srand)。如果代码足以进行认证,仍然不要不,但这不是主要问题。认证公司说我会被要求给出mt_rand函数的源代码和二进制代码(也许mt_srand还有)。那么如何以最简单和正确的方式做到这一点呢?

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

我不是 php 和 linux 的新手,但我想问一下如何正确地做,所以我在不同的 linux 服务器上部署这个 RNG 时不会那么头疼。

提前致谢。

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

4

3 回答 3

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);
}

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

于 2013-01-25T12:33:20.087 回答
0

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

于 2013-01-25T12:47:24.157 回答
0

虽然这是一个古老的问题,但它似乎是一个相关的问题。

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

您可以在 packagist 上找到该库:https ://packagist.org/packages/gamblingtec/certified-rng

于 2019-02-21T22:12:33.353 回答