gpt4 book ai didi

php - Lua 与 PHP 随机数

转载 作者:行者123 更新时间:2023-12-04 04:34:29 24 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。



Improve this question




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

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

-- 编辑

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

因此,如果我的 key 产生一个说 80 的种子,并且我在 Lua 中使用它......

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

尝试在 PHP 中解密时,我将使用相同的种子,但得到不同的输出。
mt_srand(80);
$randomNumber = mt_rand(1, 20);
// $randomNumber = 10

我需要想办法取回相同的数字,以便我能够解密字符串。

最佳答案

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

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 中我创建了以下代码:
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

关于php - Lua 与 PHP 随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19982405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com