CryptGenRandom能产生所有可能的排列吗?

2024-05-23 17:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想洗牌一个相对较长的数组(长度~400)。虽然我不是一个密码学专家,但我知道使用一个周期小于400!的随机数生成器将限制可以生成的可能排列的空间。在

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

有比我聪明的人知道这个数字发生器的周期是多少吗?这个实现有可能到达整个可能的置换空间吗?在


Tags: windows空间数字random数组密码学专家rng
1条回答
网友
1楼 · 发布于 2024-05-23 17:19:19

你几乎是对的:你需要一个周期不是400的发电机!,但内部状态大于log2(400!)位(周期也将大于400!,但后一个条件是不够的)。所以至少需要361字节的内部状态。CryptGenRandom不符合条件,但它应该足以生成361个或更多字节,以便为更好的生成器生成种子。在

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

相关问题 更多 >