我嘗試使用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