Prägnantes, tragbares und gründliches Seeding von Mt19937 PRNG in C
Trotz der Mängel bei der Verwendung von std::random_device und time(NULL) Für die Aussaat ist es möglich, ein robustes und tragbares Gerät zu erhalten Lösung:
CSPRNG-basiertes Seeding
Um die Einschränkungen von std::random_device zu vermeiden, können wir ein CSPRNG verwenden wie:
Minimale Aussaat Funktion:
Die folgende plattformübergreifende Funktion bietet einen minimalen Wrapper um verschiedene betriebssystemspezifische CSPRNGs:
size_t sysrandom(void* dst, size_t dstlen) { #ifdef _WIN32 // Windows CSPRNG implementation #elif defined(__linux__) // Linux CSPRNG implementation #else // POSIX CSPRNG implementation #endif }
Effizientes Seeding:
Mit Sysrandom verfügbar, Seeding des mt19937 PRNG wird zu:
std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed);
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWie kann ich den Mt19937 PRNG sicher in C auf verschiedenen Plattformen einsetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!