有没有rand()以外的随机生成库,开发者可以手动设置seed?
Is there any random generator library except rand(), which developer can manually set the seed?
我想验证如果种子相同,则生成的伪随机数也相同。
使用 rand() 是最简单的,但我正在寻找更安全的方法。
我发现使用 /dev/random 或 linux 的设备熵非常可靠,但找不到如何设置完全相同的种子。
我也试过 window 的 cryptgenrandom 但找不到设置种子的方法。
我可以用那些使用设备的随机生成器制作手动种子吗?
或者是否有任何其他随机生成器库可以设置手动种子?
Is there any random generator library except rand(), which developer can manually set the seed?
是的。
有 许多 可用的随机数生成器(并且大多数是可播种的)并且它们都比 rand()
好(这是非常糟糕的)。不要在生产代码中使用 srand()
/rand()
。
查看 <random>
header。
我建议 std::mt19937
用于 non-cryptographic 目的(确保 正确地 播种,而不仅仅是单个 int
) , 和 std::random_device
如果你需要原始熵(一定要检查你的实现是否正确地实现了它,标准 - 错误地恕我直言 - 允许它回落到 PRNG)。远离std::default_random_engine
,你不知道它会给你什么
是的,<random>
允许这样做,切换到它是个好主意。 C++ 的 <random>
库是 far superior to <stdlib>
's rand()
function, and allows you to 您应该将 <random>
用于您编写的任何生产代码。
我想验证如果种子相同,则生成的伪随机数也相同。 使用 rand() 是最简单的,但我正在寻找更安全的方法。 我发现使用 /dev/random 或 linux 的设备熵非常可靠,但找不到如何设置完全相同的种子。 我也试过 window 的 cryptgenrandom 但找不到设置种子的方法。 我可以用那些使用设备的随机生成器制作手动种子吗? 或者是否有任何其他随机生成器库可以设置手动种子?
Is there any random generator library except rand(), which developer can manually set the seed?
是的。
有 许多 可用的随机数生成器(并且大多数是可播种的)并且它们都比 rand()
好(这是非常糟糕的)。不要在生产代码中使用 srand()
/rand()
。
查看 <random>
header。
我建议 std::mt19937
用于 non-cryptographic 目的(确保 正确地 播种,而不仅仅是单个 int
) , 和 std::random_device
如果你需要原始熵(一定要检查你的实现是否正确地实现了它,标准 - 错误地恕我直言 - 允许它回落到 PRNG)。远离std::default_random_engine
,你不知道它会给你什么
是的,<random>
允许这样做,切换到它是个好主意。 C++ 的 <random>
库是 far superior to <stdlib>
's rand()
function, and allows you to <random>
用于您编写的任何生产代码。