首頁 >後端開發 >C++ >如何在不同平台上安全地在 C 中播種 Mt19937 PRNG?

如何在不同平台上安全地在 C 中播種 Mt19937 PRNG?

DDD
DDD原創
2024-12-05 08:45:12626瀏覽

How Can I Securely Seed the Mt19937 PRNG in C   Across Different Platforms?

在 C 中簡潔、便攜和徹底地播種 Mt19937 PRNG

儘管使用 std::random_device 和 time(NULL)有缺點對於播種,可以實現堅固且便攜的解決方案:

基於CSPRNG 的播種

為了避免std::random_device 的限制,我們可以利用CSPRNG,例如:

  • Windows: CryptGenRandom
  • 類Unix: /dev/urandom
  • 最後的手段(可選): std::random_device (可能有問題)

最少播種函數:

以下跨平台函數提供了各種特定於作業系統的CSPRNG 的最小包裝器:

高效播種:

使用可用的sysrandom,播種mt19937 PRNG變成:

附加說明:

  • 為了增強Linux (3.17 ) 上的安全性並回退到/dev/urandom。
  • 在 OpenBSD 上,使用 getentropy 而不是/dev/urandom。
  • 為了加密安全,使用 sysrandom 時應停用 I/O 緩衝。

以上是如何在不同平台上安全地在 C 中播種 Mt19937 PRNG?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn