Lua与PHP随机数字

我有一个 Lua 脚本,用于加密一个字符串并通过 HTTP 发送到 PHP 脚本。问题是,加密过程使用了 Lua 的 math.randomseedmath.random。尝试在 PHP 中解密字符串时,mt_srandmt_rand 生成的数字与 Lua 生成的数字不同。

如何使 PHP 生成类似 Lua 的数字?

-- 编辑

好的,在我的(非常简单的)加密中,我使用一个密钥生成种子。这个种子让我每次都可以获取相同的“随机数”。

因此,如果我的密钥产生种子为,比如,80,我在 Lua 中使用它...

math.randomseed(80)
local randomNumber = math.random(1, 20)
// randomNumber = 3

在尝试在 PHP 中解密时,我将使用相同的种子,但是我得到了不同的输出。

mt_srand(80);
$randomNumber = mt_rand(1, 20);
// $randomNumber = 10

我需要想出一种方法来获取相同的数字,以便我能够解密字符串。

点赞
用户2967999
用户2967999

你需要一个随机数生成器,它在 php 和 lua 上使用相同的算法。

你可以找到一个 Lua 的随机数生成器和一个相同实现的 PHP 的随机数生成器,或者你必须编写自己的随机数生成器。此外,使用系统内部生成器也不好,因为它们可能每次都不同,然后你的脚本也将不再起作用。

2013-11-14 17:09:53
用户1960364
用户1960364

而不是尝试通过复制 Lua 或 PHP 中的现有随机函数来重新发明轮子,我发现使用以下链接的方法要简单得多。我只是将代码移植到了 Lua 中,一切都很好。显然,它不会适合每一个人的情况,但对于我的使用方式来说,它是完美和简单的。

http://www.sitepoint.com/php-random-number-generator/

class Random {

    // 随机种子
    private static $RSeed = 0;

    // 设置种子
    public static function seed($s = 0) {
        self::$RSeed = abs(intval($s)) % 9999999 + 1;
        self::num();
    }

    // 生成随机数
    public static function num($min = 0, $max = 9999999) {
        if (self::$RSeed == 0) self::seed(mt_rand());
        self::$RSeed = (self::$RSeed * 125) % 2796203;
        return self::$RSeed % ($max - $min + 1) + $min;
    }

}

我改变的唯一一件事就是默认种子,以及删除了使用 mt_rand() 的那一行。

然后在 Lua 中,我创建了以下代码:

local mySeed = 0;

function setSeed(s)
    mySeed = math.abs(tonumber(s)) % 9999999 + 1;
    myRand();
end

function myRand(min, max)
    min = min or 0;
    max = max or 9999999;
    mySeed = (mySeed * 125) % 2796203;
    return mySeed % (max - min + 1) + min;
end
2013-11-14 17:48:08