如何改善代码以生成安全的随机数?

时间:2019-02-15 20:18:07

标签: c++ windows random

我正在尝试找出在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相同的函数以生成安全的随机数。

1 个答案:

答案 0 :(得分:5)

std::rand()没有提供足够的保证可用于加密应用程序(也称为安全随机数):

  

不能保证随机序列的质量   生产的。过去,rand()的某些实现已经严重   随机性,分布和周期的缺点   产生的序列(在一个众所周知的例子中,低位   通话之间在1和0之间交替显示。

您可以使用<random>库获得更高质量的随机生成。但是同样,所使用的生成器(例如mersene twister)不足以用于加密用途。

因此,您最好使用专门的库,例如OpenSSL

或者,根据您的平台选择,您可以将Windows API与CryptGenRandom()或更好的BCryptGenRandom()一起使用。