Random 是否可以预测数字生成器中的下一个数字?

Random 是否可以预测数字生成器中的下一个数字?,random,prediction,Random,Prediction,对于编程来说,它永远不是“随机的”。甚至随机生成器也使用算法来预测随机数。但是,如果知道生成的方法,我们可以预测下一个将生成的5个数字吗?假设采用确定性算法HHM。创建两个相同的随机数生成器。问第一个随机数发生器下一个将产生什么,5次。是的,可以预测随机数发生器下一个将产生什么数字。我见过这种叫做破解、破坏或攻击RNG的东西。用“随机数生成器”搜索这些术语中的任何一个都会得到很多结果 阅读一篇关于随机数发生器如何被攻击的优秀的第一手资料。总之,作者根据一个在线扑克网站使用的错误洗牌算法找出了RN

对于编程来说,它永远不是“随机的”。甚至随机生成器也使用算法来预测随机数。但是,如果知道生成的方法,我们可以预测下一个将生成的5个数字吗?

假设采用确定性算法HHM。创建两个相同的随机数生成器。问第一个随机数发生器下一个将产生什么,5次。

是的,可以预测随机数发生器下一个将产生什么数字。我见过这种叫做破解、破坏或攻击RNG的东西。用“随机数生成器”搜索这些术语中的任何一个都会得到很多结果

阅读一篇关于随机数发生器如何被攻击的优秀的第一手资料。总之,作者根据一个在线扑克网站使用的错误洗牌算法找出了RNG的用途。然后,他们通过对处理过的手进行取样,找出RNG种子。一旦他们有了算法和种子,他们就确切地知道在随后的洗牌后甲板将如何排列。

绝大多数“随机数生成器”实际上是“伪随机数生成器”,这意味着,给定相同的起点(种子),它们将复制相同的序列。理论上,通过观察一段时间内的数字序列(并了解特定算法),可以预测下一个数字,就像“破解”加密一样


当然,根据具体的算法,完成这项工作所需的时间/精力会有很大的不同。“加密”的RNG比你的花园品种RNG更难预测。但是对于大多数使用随机数的人来说,这种可预测性不是问题。

你可以再次运行数字生成器。这将给你下一个数字。所以,如果我试图在相同的数字范围内使用相同的生成器,我总是会得到相同的结果?那么,它与生成静态数字数组有什么不同呢?是的,所使用的RNG算法难度大不相同。@脚本:它与具有预先确定的随机数的静态数组没有什么区别,只是该算法需要大约100个字节,而
rand()的静态数组
在GCC中大约需要16GB。现在大多数人使用Mersenne绕圈器,需要2*10^19935字节。从尺度的角度来看,在可观测的宇宙中大约有2*10^82个原子;在Java中使用了两次,得到了不同的结果…@Scripty请查看文档以了解。10是该语句中的范围,而不是种子。创建两个具有相同种子的
Random
对象,它们将为您提供相同的随机数序列。