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

问题描述 投票:1回答:1

我试图找出生成安全随机数的最佳方法或库,例如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相同的功能,以生成安全的随机数。

c++ windows random
1个回答
5
投票

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

无法保证产生的随机序列的质量。在过去,rand()的一些实现在所产生的序列的随机性,分布和周期中具有严重的缺点(在一个众所周知的示例中,低阶位简单地在调用之间在1和0之间交替)。

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

所以你最好去专业的库,比如OpenSSL

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

© www.soinside.com 2019 - 2024. All rights reserved.