CryptGenRandom可以生成所有可能的排列吗?

时间:2014-11-05 17:30:20

标签: python random

我想改组一个相对较长的数组(长度约为400)。虽然我不是加密专家,但据我所知,使用周期小于400!的随机数生成器将限制可生成的可能排列的空间。

我正在尝试使用Python的random.SystemRandom数字生成器类,它在Windows中使用CryptGenRandom作为其RNG

有谁比我更聪明,知道这个数字生成器的周期是什么?这种实现是否有可能达到可能排列的整个空间?

1 个答案:

答案 0 :(得分:0)

你几乎是正确的:你需要一个不是期间为400的生成器,但内部状态超过log2(400!)位(其中也将有一个大于400的时期!,但后一个条件是不够的)。所以你需要至少361个字节的内部状态。 CryptGenRandom不符合条件,但它应足以生成361个或更多字节,以便为更好的生成器播种。

我认为Marsaglia拥有1024和4096字节状态的MWC版本。