Lua vs PHP随机数字
我有一个lua脚本来加密一个字符串并通过http发送给一个PHP脚本。问题是,加密过程使用Lua的math.randomseed
和math.random
。当试图在PHP中解密字符串时,mt_srand
和mt_rand
产生与Lua不同的数字。Lua vs PHP随机数字
我怎样才能让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
我需要找出一种方法来找回相同的数字,以便我能够解密字符串。
你需要一个随机数发生器,它在php和lua上使用相同的算法。
要么你找到一个随机数发生器的Lua和一个PHP有相同的实现,或者你必须编程你自己的。此外,使用系统实习生成器也很糟糕,因为它们每次都可以改变,然后你的脚本也不再有效。
而不是试图通过复制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
有一个标准的警告关于滚动你自己的加密,我想你会发现,如果你依赖于这个除了简单的混淆之外的任何东西警告。这两种(所有)平台在自己的代码中实现相同的生成器的技术是完善的。只要这不能保护你的日记甚至是有价值的东西,你就会好起来的。 – RBerteig
让我看看,如果我理解,你有一个随机数发生器产生不同数字的问题? –
你需要给我们更多关于你想要实现的细节。 – lhf
增加了更多细节 – user1960364