gpt4 book ai didi

c++ - std::random_device的实现方式

转载 作者:行者123 更新时间:2023-12-02 10:39:14 25 4
gpt4 key购买 nike

我在Win7上使用MSVC 2017测试了以下迷你示例:

#include <iostream>
#include <random>

int main()
{
std::random_device rd;
std::cout << "entropy: " << rd.entropy() << std::endl;
return 0;
}

令我惊讶的是,它输出“熵:32”。这意味着rd生成实随机数而不是伪随机数。我期待“熵:0”。据我了解,没有任何有限长度的代码能够生成实数,它需要一个真正的特殊设计的物理设备来生成。我的测试PC上没有连接此类设备。

我的问题是:如何实现std::random_device而不产生特殊的硬件支持而生成真实的随机数?

最佳答案

首先,您确定您的PC中没有专门设计的物理设备吗?英特尔在2013年向CPU添加了此类硬件,而AMD在2015年也采用了这种硬件。

其次,可以通过测量诸如物理过程之类的定时中的抖动来获得合理的熵。

  • 网络数据包
  • 硬盘(如果硬盘是SSD,则用处不大)
  • 鼠标移动
  • 键盘单击

  • 对于台式机或笔记本电脑而言,获得良好的熵并不难。更具挑战性的是在受限环境中,如智能卡或首次启动时的IoT设备(那里没有很多网络数据包-但您希望生成良好的公钥/私钥对)。

    关于c++ - std::random_device的实现方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53038044/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com