我试图找出生成安全随机数的最佳方法或库,例如python中的secrets
。
我正在使用代码块在Windows 10上工作。到目前为止我做到了这一点:
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main()
{
srand((unsigned)time(0));
int i;
i = (rand()%6)+1;
cout << i << "\n";
}
我试图从python复制与secrets
相同的功能,以生成安全的随机数。
std::rand()
没有为加密应用程序(又名安全随机数)提供足够的保证:
无法保证产生的随机序列的质量。在过去,rand()的一些实现在所产生的序列的随机性,分布和周期中具有严重的缺点(在一个众所周知的示例中,低阶位简单地在调用之间在1和0之间交替)。
您可以使用<random>
库获得更高质量的随机生成。但同样,使用的生成器,例如mersene twister,不足以用于加密。
所以你最好去专业的库,比如OpenSSL。
或者,根据您的平台选择,您可以使用Windows API,CryptGenRandom()
或更好的BCryptGenRandom()
。