我尝试使用 CryptGenRandom() 调用创建随机数以避免密码攻击。我尝试运行以下代码,该代码同时打印 rand 调用和 CryptGenRandom() 调用。
HCRYPTPROV hProvider = 0;
const DWORD dwLength = 5;
BYTE pbBuffer[dwLength] = {};
if (!::CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT|CRYPT_SILENT))
return 1;
srand((unsigned)time (0));
for(int i=0; i<10; ++i)
cout<<"rand()::"<<i<<":"<<rand()<<endl;
for (DWORD i = 0; i < dwLength; ++i)
{
if (!::CryptGenRandom(hProvider, dwLength, pbBuffer))
{
::CryptReleaseContext(hProvider, 0);
return 1;
}
std::cout << "windows::"<<i<<"::"<<static_cast<unsigned int>(pbBuffer[0])<< std::endl;
}
if (!::CryptReleaseContext(hProvider, 0))
return 1;
但是这个rand()
接听电话的输出是
rand()::0:9754
rand()::1:526
rand()::2:29162
rand()::3:10461
rand()::4:31585
rand()::5:15594
rand()::6:12157
rand()::7:19178
rand()::8:5413
rand()::9:16157
打电话CryptGenRandom()
给
windows::0::167
windows::1::138
windows::2::197
windows::3::101
windows::4::44
任何人都可以帮助我获得使用 CryptGenRandom 进行 rand() 调用的相同输出吗?CryptGenRandom() 仅提供 3 位随机数,不足以设置我在代码中使用的睡眠调用的值。