首页 > 后端开发 > C++ > 如何在不同平台上安全地在 C 中播种 Mt19937 PRNG?

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

DDD
发布: 2024-12-05 08:45:12
原创
619 人浏览过

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 的最小包装器:

size_t sysrandom(void* dst, size_t dstlen) {
  #ifdef _WIN32
    // Windows CSPRNG implementation
  #elif defined(__linux__)
    // Linux CSPRNG implementation
  #else
    // POSIX CSPRNG implementation
  #endif
}
登录后复制

高效播种:

使用可用的 sysrandom,播种 mt19937 PRNG变为:

std::uint_least32_t seed;
sysrandom(&seed, sizeof(seed));
std::mt19937 gen(seed);
登录后复制

附加说明:

  • 为了增强 Linux (3.17 ) 上的安全性,请考虑使用 getrandom 并回退到 /dev/urandom。
  • 在 OpenBSD 上,使用 getentropy 而不是/dev/urandom。
  • 为了加密安全,使用 sysrandom 时应禁用 I/O 缓冲。

以上是如何在不同平台上安全地在 C 中播种 Mt19937 PRNG?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板