如何在C中预测Rand()函数?

时间:2018-09-21 14:21:41

标签: c algorithm random

我正在尝试制作一个预言序列中下一个随机数的预言机。我有一个随机生成的数字数组。

2 个答案:

答案 0 :(得分:1)

rand()函数是-随机数生成器(PRNG)。它不是cryptographically secure熵的来源。如果您知道种子,则可以确定性地完全预测序列,通常基于Linear Congruential Generator(LCG)。这样的生成器具有一定的周期长度,然后重复。

如果您知道给定的序列是从头开始的,那么蛮力种子来查找匹配的初始序列将是微不足道的。否则,您可以使用统计方法来缩小潜在种子的范围。

答案 1 :(得分:-2)

如果您有实际的随机数,则无法预测它们。

可以对软件进行编程,以使用实际的随机数,这些实际的随机数是通过监视随机事件(例如来自各种组件的背景辐射,原子衰变和电噪声)获得的。这通常仅用于创建加密密钥之类的关键应用程序,因为该操作将阻塞,直到收集到足够的“随机位”为止。

大多数软件使用一种算法,该算法根据种子和过去的事件(例如PRNG的调用,经过的时间等)创建看起来随机的数字。如果您知道所使用的算法和所有事件,则可以100精度进行预测它可以用作输入,也可以将种子重置为已知值。