【发布时间】:2017-04-29 05:45:59
【问题描述】:
local digits = {'1', '2', '3', '4', '5', '6', '8', '9'}
math.randomseed(os.time())
local result = digits[math.random(8)]
for i = 2, 50 do
result = result..digits[math.random(8)]
end
print(result)
--> 88854243421464255299891111895292628431988589634664
这是一个 Lua 脚本,旨在吐出 50 个随机数字,不包括 0 和 7。我似乎找不到 Lua 随机算法。是否可以找到 os.time() 返回的值?
通俗地说,脚本是这样工作的:
- 定义一个包含八个单字符串的列表。
- 使用自 1970 年 1 月 1 日午夜以来的秒数为伪随机算法播种。
- 使用伪随机算法选择 1 到 8 之间的数字,然后使用该数字从列表中选择一个项目。例如。选择的数字是七,算法选择列表中的第七项。
- 将该项目添加到结果的末尾。重复直到结果达到 50 位数为止。
所以因为省略了七,所以随机算法真的吐出来了:
77754243421464255288781111785282627431877578634664
但是因为缺少了七,所以七加八变成了八加九,结果如下:
88854243421464255299891111895292628431988589634664
为了澄清,我试图弄清楚随机算法如何工作以找到作为随机种子输入的密钥。
也在这里问:https://forum.roblox.com/Forum/ShowPost.aspx?PostID=215349554 在这里:https://scriptinghelpers.org/questions/42360/can-this-script-be-reverse-engineered-to-find-the-random-seed 在这里:https://crypto.stackexchange.com/questions/47027/can-this-code-be-reverse-engineered-to-find-the-random-seed
【问题讨论】:
标签: algorithm random lua cryptography