除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?

Is there any random generator library except rand(), which developer can manually set the seed?

本文关键字:开发 种子 设置 之外 rand 是否 除了 任何随      更新时间:2023-10-16

我想验证如果种子相同,则生成的伪随机数是否相同。 使用 rand(( 是最简单的,但我正在寻找更安全的方法。 我发现将设备熵与 linux 的/dev/random 一起使用是非常可靠的,但找不到如何设置完全相同的种子。 我也尝试了窗口的cryptgenrandom,但找不到设置种子的方法。 我可以用那些使用设备东西的随机生成器制作手动种子吗? 或者有没有其他随机生成器库可以手动设置种子?

是的,<random>允许这样做,切换到它是一个好主意。C++的<random>库远远优于<stdlib>rand()功能,每次都可以设置种子。您应该将<random>用于您编写的任何生产代码。

除了 rand(( 之外,是否有任何随机生成器库,开发人员可以手动设置种子?

是的。 有许多可用的随机数生成器(大多数是可播种的(,并且它们都比rand()更好(这很糟糕(。不要在生产代码中使用srand()/rand()

查看<random>标题。

我建议std::mt19937用于非加密目的(确保正确播种,而不仅仅是使用单个int(,并std::random_device是否需要原始熵(请务必检查您的实现是否实际正确实现它,标准 - 错误恕我直言 - 允许它回退到 PRNG(。远离std::default_random_engine,你不知道它会给你什么。