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

cyb*_*unk 1 c++ windows random

我试图找出什么是生成安全随机数(例如secrets在python中)的最佳方法或库。

我正在使用代码块在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"; 
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试复制与secretspython 相同的功能以生成安全的随机数。

Chr*_*phe 5

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

不能保证所产生的随机序列的质量。过去,rand()的某些实现在生成的序列的随机性,分布和周期方面存在严重缺陷(在一个众所周知的示例中,低阶位在调用之间仅在1和0之间交替)。

您可以使用该<random>库获得更高质量的随机生成。但是同样,所使用的发生器,例如,亚美尼亚捻线器,不足以用于加密用途。

因此,您最好使用OpenSSL之类的专用库。

或者,根据您的平台选择,您可以使用Windows API,CryptGenRandom()或者使用更新的BCryptGenRandom()