我正在尝试找出在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
相同的函数以生成安全的随机数。
答案 0 :(得分:5)
std::rand()
没有提供足够的保证可用于加密应用程序(也称为安全随机数):
不能保证随机序列的质量 生产的。过去,rand()的某些实现已经严重 随机性,分布和周期的缺点 产生的序列(在一个众所周知的例子中,低位 通话之间在1和0之间交替显示。
您可以使用<random>
库获得更高质量的随机生成。但是同样,所使用的生成器(例如mersene twister)不足以用于加密用途。
因此,您最好使用专门的库,例如OpenSSL。
或者,根据您的平台选择,您可以将Windows API与CryptGenRandom()
或更好的BCryptGenRandom()
一起使用。