Heim > Backend-Entwicklung > C++ > Wie kann ich den MT19937-PRNG in C richtig einsetzen, um eine sichere Zufallszahlengenerierung zu ermöglichen?

Wie kann ich den MT19937-PRNG in C richtig einsetzen, um eine sichere Zufallszahlengenerierung zu ermöglichen?

DDD
Freigeben: 2024-11-29 01:11:11
Original
679 Leute haben es durchsucht

How Can I Properly Seed the MT19937 PRNG in C   for Secure Random Number Generation?

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);
Nach dem Login kopieren

Diese Methode ist jedoch fehlerhaft weil:

  • std::random_device() unzureichende Entropie zurückgibt.
  • std::mt19937 gen(rd());gen() erzeugt möglicherweise keine gute Ausgabeverteilung.
  • std::random_device kann als PRNG mit einem festen implementiert werden Seed.

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage