随机迭代整数序列,1到n

时间:2015-05-05 20:14:57

标签: random integer sequence

我想要迭代一系列整数。您可以假设序列以1开头,以n结尾,其中n > 1。但是,我不想按顺序迭代它们。目标是以随机方式遍历所有这些。另外,n可能非常大,可能在数万亿,所以我不能将范围存储在内存中。有没有办法做到这一点?

我知道有一种方法可以使用数组,已经在内存中。如果你不能一次存储整个范围,可以做类似的事情吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Format-Preserving Encryption加密计数器。

选择一个对称密码,精心设计用于加密最多N的数字。(您可以使用建议的AES-FFX方案)然后生成具有高熵的随机密钥并开始加密数字0,1, 2,......向上。由于加密确保了1:1映射并且良好的加密看起来是随机的,因此您最终只使用O(1)存储来获得一系列非重复随机数。

counter mode (CTR)中使用分组密码是众所周知的创建cryptographically secure pseudo-random number generator (CSPRNG)的技术。第10.2.1节。 NIST SP 800-90A提供了额外的提示。 由于随机性的质量does not show any statistical weaknesses,建议使用AES作为底层分组密码进行随机模拟。

这个想法不过是新的,已经在Craig McQueen多次在stackoverflow上提出了:

此外,crypto.stackexchange有几个主题: