C++ 如何实现std::random_设备

C++ 如何实现std::random_设备,c++,random,C++,Random,我在Win7上使用MSVC 2017测试了以下小示例: #include <iostream> #include <random> int main() { std::random_device rd; std::cout << "entropy: " << rd.entropy() << std::endl; return 0; } #包括 #包括 int main() { std::随机_装置rd; st

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

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;
    std::cout << "entropy: " << rd.entropy() << std::endl;
    return 0;
}
#包括
#包括
int main()
{
std::随机_装置rd;
std::cout首先,你确定你的电脑中没有专门设计的物理设备吗?英特尔在2013年将这种硬件添加到了CPU中,AMD在2015年也这样做了


其次,可以通过测量物理过程(例如,时间)中的抖动来获得相当好的熵

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

对于台式机或笔记本电脑来说,获得良好的熵其实并不难。更具挑战性的是在受限环境中,如智能卡或物联网设备首次启动时(网络数据包不多,但您希望生成一个良好的公钥/私钥对)。

,而一些@gman似乎是靠“uuux86_rdrand(无效)",这个问题似乎已经为以前的VC++版本找到了答案:该标准说,如果系统有一个不确定的随机数源,那么
std::random_设备的实现应该使用它。许多
OS
可以通过物理设备接口访问物理随机数源。至少有一个主要的imple精神分裂症发作了。