首頁 > 後端開發 > C++ > 如何在 C 中正確播種 MT19937 PRNG 以實現安全隨機數產生?

如何在 C 中正確播種 MT19937 PRNG 以實現安全隨機數產生?

DDD
發布: 2024-11-29 01:11:11
原創
681 人瀏覽過

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

如何在 C 中徹底播種 MT19937 PRNG

通常,std::random_device用來產生隨機數,如下面的程式碼:

但是,這個方法是有缺陷,因為:

  • std::random_device() 回傳的熵不足。
  • std::mt19937 gen(rd());gen() 可能無法產生良好的輸出分佈。
  • std::random_device 可以實現為具有固定值的PRNG

更可靠的方法是使用CSPRNG(例如Windows 上的CryptGenRandom 或類Unix 系統上的/dev/urandom )來產生高品質的隨機位元組來為PRNG 播種。例如:

此程式碼使用 /dev/urandom 作為 CSPRNG,並使用 32 位元值作為 PRNG 的種子,應該會增加該值以提高安全性。這種方法是可移植的、經過充分測試且易於使用的,為在 C 中產生隨機數提供了堅實的基礎。

以上是如何在 C 中正確播種 MT19937 PRNG 以實現安全隨機數產生?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板