在 C 中简洁、便携和彻底地播种 Mt19937 PRNG
尽管使用 std::random_device 和 time(NULL) 有缺点对于播种,可以实现坚固且便携的解决方案:
基于 CSPRNG 的播种
为了避免 std::random_device 的限制,我们可以利用 CSPRNG,例如:
最少播种函数:
以下跨平台函数提供了各种特定于操作系统的 CSPRNG 的最小包装器:
size_t sysrandom(void* dst, size_t dstlen) { #ifdef _WIN32 // Windows CSPRNG implementation #elif defined(__linux__) // Linux CSPRNG implementation #else // POSIX CSPRNG implementation #endif }
高效播种:
使用可用的 sysrandom,播种 mt19937 PRNG变为:
std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed);
附加说明:
以上是如何在不同平台上安全地在 C 中播种 Mt19937 PRNG?的详细内容。更多信息请关注PHP中文网其他相关文章!