寻找具有特定属性的伪随机数生成算法

时间:2019-01-13 21:25:58

标签: algorithm random

我正在寻找具有以下属性的伪随机数生成器:

  • 非重复:返回的数字必须是唯一的,直到从0n的所有数字都返回一次,然后才可以再次重复每个数字,依此类推。
  • 确定性:如果我两次使用相同的种子,则需要产生相同的序列。
  • 很少分配:它不需要分配大的存储区域,然后像序列排列那样将其数据混合在一起。

我的目标是我可以使用一些种子值初始化随机数生成器,然后连续调用其函数以生成序列中的下一个数字,可能将其传递给前一个。

1 个答案:

答案 0 :(得分:2)

一种可能的方法是分组密码。用给定的密钥加密数字0、1、2,...,并确保输出是唯一的,并且仅在传递块大小后才会重复。每个键将生成不同的排列。您只需要跟踪密钥和最后加密的数字即可。

DES使用64位块,而AES使用128位块。如果这些尺寸不合适,那么您需要查看Format preserving encryption来找到合适尺寸的块。

需要注意的一点是,非重复生成器不是随机的。随着生成更多的数字,未使用的数字池将缩小,直到完全确定最后一个数字为止。您需要考虑这在您的应用程序中是否重要。