首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua vs PHP随机数

Lua vs PHP随机数
EN

Stack Overflow用户
提问于 2013-11-15 00:01:35
回答 2查看 384关注 0票数 2

我有一个lua脚本,它对字符串进行加密,并通过http将其发送到PHP脚本。问题是,加密过程使用Lua的math.randomseedmath.random。当尝试在PHP中解密字符串时,mt_srandmt_rand产生的数字与Lua不同。

怎样才能让php生成像Lua这样的数字呢?

--编辑

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

因此,如果我的密钥产生一个种子,比如说80,并且我在Lua中使用这个...

代码语言:javascript
复制
math.randomseed(80)
local randomNumber = math.random(1, 20)
// randomNumber = 3

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

代码语言:javascript
复制
mt_srand(80);
$randomNumber = mt_rand(1, 20);
// $randomNumber = 10

我需要找出一种方法来取回相同的数字,这样我才能解密字符串。

EN

回答 2

Stack Overflow用户

发布于 2013-11-15 01:48:08

而不是试图通过为相反的语言复制Lua或PHP中的现有随机函数来重新发明轮子。我发现使用下面链接中的方法要容易得多。只需将代码移植到Lua,一切都很顺利。显然,它不会适合每个人的情况,但对于我如何使用它,它是完美和简单的。http://www.sitepoint.com/php-random-number-generator/

代码语言:javascript
复制
class Random {

    // random seed
    private static $RSeed = 0;

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

    // generate random number
    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中,我创建了以下代码:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-11-15 01:09:54

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

你要么为Lua找到一个随机数生成器,要么为PHP找到一个具有相同实现的随机数生成器,或者你必须自己编写一个。此外,使用系统内部生成器也很糟糕,因为它们可能每次都会更改,然后您的脚本也不再有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19982405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档