问题:
最近的答案经常建议使用
便携式和彻底的播种:
一种可移植且彻底的播种 mt19937 的方法涉及使用 CSPRNG,例如如:
代码示例:
#include <cstdint> #include <cstdlib> #include <fstream> size_t sysrandom(void* dst, size_t dstlen); std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed);
Linux专业化getrandom:
#if defined(HAVE_GETRANDOM) size_t sysrandom(void* dst, size_t dstlen) { int bytes = syscall(SYS_getrandom, dst, dstlen, 0); if (bytes != dstlen) { throw std::runtime_error("Unable to read N bytes from CSPRNG."); } return dstlen; } #endif
OpenBSD 特殊情况:
#if defined(HAVE_GETENTROPY) size_t sysrandom(void* dst, size_t dstlen) { int bytes = getentropy(dst, dstlen); if (bytes != dstlen) { throw std::runtime_error("Unable to read N bytes from CSPRNG."); } return dstlen; } #endif
其他想法:
以上是如何用 C 语言为 mt19937 生成完全随机的种子?的详细内容。更多信息请关注PHP中文网其他相关文章!