問題:
最近的答案經常建議使用
便攜式和徹底的播種:
一種可移植且徹底的播種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; } #endifLinux專業化getrandom:
Linux專業化getrandom:
#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
OpenBSD特殊情況:
以上是如何用 C 語言為 mt19937 產生完全隨機的種子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!