Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membenihkan MT19937 PRNG dalam C dengan Benar untuk Penjanaan Nombor Rawak Selamat?
Cara Membenihkan MT19937 PRNG dalam C
Biasanya, std::random_device digunakan untuk menjana nombor rawak, seperti yang dilihat dalam kod berikut:
std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, 5); dis(gen);
Walau bagaimanapun, kaedah ini adalah cacat kerana:
Pendekatan yang lebih dipercayai ialah menggunakan CSPRNG, seperti CryptGenRandom pada Windows atau /dev/urandom pada sistem seperti Unix, untuk menjana bait rawak berkualiti tinggi untuk menyemai PRNG. Contohnya:
#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; }
Kod ini menggunakan /dev/urandom sebagai CSPRNG dan menyemai PRNG menggunakan nilai 32-bit, yang harus ditingkatkan untuk keselamatan yang lebih baik. Pendekatan ini mudah alih, diuji dengan baik dan mudah digunakan, menyediakan asas yang kukuh untuk menjana nombor rawak dalam C .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenihkan MT19937 PRNG dalam C dengan Benar untuk Penjanaan Nombor Rawak Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!