我正在寻找具有以下属性的伪随机数生成器:
0
到n
的所有数字都返回一次,然后才可以再次重复每个数字,依此类推。我的目标是我可以使用一些种子值初始化随机数生成器,然后连续调用其函数以生成序列中的下一个数字,可能将其传递给前一个。
答案 0 :(得分:2)
一种可能的方法是分组密码。用给定的密钥加密数字0、1、2,...,并确保输出是唯一的,并且仅在传递块大小后才会重复。每个键将生成不同的排列。您只需要跟踪密钥和最后加密的数字即可。
DES使用64位块,而AES使用128位块。如果这些尺寸不合适,那么您需要查看Format preserving encryption来找到合适尺寸的块。
需要注意的一点是,非重复生成器不是随机的。随着生成更多的数字,未使用的数字池将缩小,直到完全确定最后一个数字为止。您需要考虑这在您的应用程序中是否重要。