Problem:
Aktuelle Antworten schlagen oft die Verwendung von
Portables und gründliches Seeding:
Ein tragbarer und gründlicher Ansatz zum Seeding von mt19937 beinhaltet die Verwendung eines CSPRNG, z als:
Codebeispiel:
#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 Spezialisierung mit 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-Sonderfall:
#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
Andere Gedanken:
Das obige ist der detaillierte Inhalt vonWie kann ich in C völlig zufällige Seeds für mt19937 generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!