So säen Sie den MT19937 PRNG gründlich in C
Normalerweise wird std::random_device zum Generieren von Zufallszahlen verwendet, wie in der Abbildung gezeigt Folgender Code:
std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, 5); dis(gen);
Diese Methode ist jedoch fehlerhaft weil:
Ein zuverlässigerer Ansatz ist die Verwendung eines CSPRNG, wie z. B. CryptGenRandom unter Windows oder /dev/urandom auf Unix-ähnlichen Systemen, um hochwertige Zufallsbytes für das Seeding des PRNG zu generieren. Zum Beispiel:
#include <bit> #include <iostream> #include <string> size_t sysrandom(void* dst, size_t dstlen) { std::ifstream stream("/dev/urandom", std::ios_base::binary | std::ios_base::in); stream.read((char*)dst, dstlen); return dstlen; } int main() { std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed); // Your code to use the generator here... return 0; }
Dieser Code verwendet /dev/urandom als CSPRNG und setzt den PRNG mit einem 32-Bit-Wert, der aus Sicherheitsgründen erhöht werden sollte. Dieser Ansatz ist portierbar, gut getestet und einfach zu verwenden und bietet eine solide Grundlage für die Generierung von Zufallszahlen in C.
Das obige ist der detaillierte Inhalt vonWie kann ich den MT19937-PRNG in C richtig einsetzen, um eine sichere Zufallszahlengenerierung zu ermöglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!