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

how can I improve my code to generate secure random numbers?

本文关键字:安全 随机数 何改进 代码      更新时间:2023-10-16

我试图找到生成安全随机数的最佳方法或库,例如Python中的secrets

我正在使用CodeBlocks在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()没有提供足够的保证,用于用于加密应用程序(又称安全随机数):

没有保证随机序列的质量 生产。过去,兰德()的某些实施情况很认真 随机性,分布和周期的缺点 产生的序列(在一个众所周知的示例中,低阶位简单 在呼叫之间的1到0之间交替)。

您可以使用<random>库获得更高质量的随机生成。但是,同样,使用的发电机,例如Mersene Twister不足以用于加密使用。

因此,您最好选择诸如OpenSSL之类的专业库。

另外,给定平台选择,您可以使用CryptGenRandom()或更好的BCryptGenRandom()

使用Windows API。