Ensemencement succinct, portable et approfondi de Mt19937 PRNG en C
Malgré les lacunes de l'utilisation de std::random_device et de time(NULL) pour l'ensemencement, il est possible d'obtenir un système robuste et portable solution :
Amorçage basé sur CSPRNG
Pour éviter les limitations de std::random_device, nous pouvons utiliser un CSPRNG tel que :
Ensemencement minimal Fonction :
La fonction multiplateforme suivante fournit un wrapper minimal autour de divers CSPRNG spécifiques au système d'exploitation :
size_t sysrandom(void* dst, size_t dstlen) { #ifdef _WIN32 // Windows CSPRNG implementation #elif defined(__linux__) // Linux CSPRNG implementation #else // POSIX CSPRNG implementation #endif }
Amorçage efficace :
Avec sysrandom disponible, ensemencement du mt19937 PRNG devient :
std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed);
Notes supplémentaires :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!