在编程中,永远没有所谓的“随机”。即使随机生成器也使用算法来预测随机数。但是,如果知道生成方法,是否可能预测将生成的接下来的5个数字呢?
在编程中,永远没有所谓的“随机”。即使随机生成器也使用算法来预测随机数。但是,如果知道生成方法,是否可能预测将生成的接下来的5个数字呢?
是的,有可能预测下一个随机数生成器会产生什么数字。我曾见过这个过程被称为“破解”、“攻击”或“突破”RNG。使用这些术语之一和“随机数生成器”进行搜索应该会得到很多结果。
阅读我们如何学会在线扑克作弊:软件安全研究,可以了解如何攻击随机数生成器的出色第一手资料。总结一下,作者们基于在线扑克网站采用的错误洗牌算法找出了使用的RNG。然后他们通过抽样已发放的牌来确定RNG种子。一旦他们获得算法和种子,他们就确切地知道稍后洗牌后牌组将如何安排。
假设使用确定性算法。创建两个完全相同的随机数生成器。询问第一个生成器下一个将产生什么数字,重复5次。
rand()
的静态数组需要约16GB。 - Mooing Duck