[英]Why does this code always generate zero when I want to generate random numbers? How can I fix the problem?
[英]how can I improve my code to generate secure random numbers?
我试图找出什么是生成安全随机数(例如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>
库获得更高质量的随机生成。 但是同样,所使用的发生器,例如, 亚美尼亚捻线器 ,不足以用于加密用途。
因此,您最好使用OpenSSL之类的专用库。
或者,根据您的平台选择,您可以将Windows API与CryptGenRandom()
一起使用,或者更好的是,将其与更新的BCryptGenRandom()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.