我尝试使用CryptGenRandom()调用创建随机数以避免加密攻击。 我试着运行打印rand调用和CryptGenRandom()调用的follwing代码。CryptGenRandom输出与rand()调用相同
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? CryptGenRandom()只给出3个数字的随机数字,这些数字不足以设置我在代码中使用的睡眠呼叫的值。
严...... **否**。 'CryptGenRandom'是一个密码安全的PRNG。如果你可以让它产生一个特定的序列,这将是一个**巨大的问题。 'CryptGenRandom'的输出有什么问题? –
它只给出3位整数输出_因为你只使用第一个BYTE_。尝试'* static_cast(pbBuffer)'并比较... –
Useless
我试图改变BYTE,但它不工作。你能帮我解决这个问题吗? – user1488334