我想写一个程序来使用/dev/random
linux 生成真正随机的数字,但后来我发现它的运行时间偶尔是不可接受的.它的C版本运行速度一致.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char*argv[])
{
ifstream random("/dev/random", ios_base::in);
int t;
random.read(reinterpret_cast<char*>(&t), sizeof(t));
cout << t << endl;
random.close();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行时间的时间统计
$: time ./random
-1040810404
real 0m0.004s
user 0m0.000s
sys 0m0.000s
$: time ./random
-1298913761
real 0m4.119s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
你可能已经耗尽了熵池.创建(好收获)熵是基于设备驱动程序,它们对物理世界的质量进行抽样,这些质量大多是不可预测的.但是,如果这些设备不是非常活跃或者熵产生算法停止,那么您的读取/dev/random
也会停止.
你能用/dev/urandom
吗?如果没有,你应该研究一下你能以更确定的方式产生更多熵的方法.