使用Fortify做源码审计的时候,经常会爆出rand()函数不随机,为什么不随机呢?下面来看看代码。
多次运行以下程序,会发现多次运行的结果都是相同的,说明种子发生器是固定的。因此需要增加种子的随机性。引入srand((int)time(0) )函数,但srand函数每次只能调用一次?由于计算机运行速度快,srand函数的种子还来不及改变。
不加srand函数
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
int i;
cout << "On this computer,the RAND_MAX is " << RAND_MAX <<endl;
cout << "Five numbers the rand function generates as follow:" <<endl;
for (i = 0; i < 5; i++)
cout << rand() << ";";
cout << "\n";
return 0;
}