2013-10-29 55 views
0

我在寫使用OpenSSL的隨機數生成器API的一個隨機數發生器。我正在給隨機數發生器提供種子。種子是使用RAND_seed() API的OpenSSL,並給予種子後,我打電話Rand_bytes() API來獲取隨機數提供給OpenSSL的。即使提供的種子是相同的,爲什麼openssl會給出不同的隨機數?

但問題是,如果種子是一樣的,Rand_bytes應該給我相同的隨機數,但在我的情況下,我不會得到相同的隨機數。這種行爲的原因是什麼?解決辦法是什麼 ? 下面

#define _64BIT_SIZE 8 

int GenerateRandom_64(unsigned char * apcRandom_64) 
{ 
    unsigned char cRandBytes_64[_64BIT_SIZE] = {0}, 
        cSeed_64[_64BIT_SIZE]  = 
            {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; 
    RAND_seed(cSeed_64, _64BIT_SIZE); /* seed is cSeed_64 */ 
    if(!RAND_bytes(apcRandom_64, _64BIT_SIZE)) 
     printf("nOt seeded the random bit generator properly\n"); 
    return 0; 
} 
+0

爲了安全起見... – 2013-10-29 10:55:38

回答

0

RAND_seed()的代碼被賦予相同主叫RAND_add()其中熵參數採用相同的值的種子緩衝區中的字節的數量。 RAND_add()將種子數據混合到熵池中。在具有/dev/urandom的系統上,熵池從中預先播種。

因此,RAND_bytes()將始終產生一個不可預測的序列,除非您在不提供/dev/urandom的計算機上運行。

更多信息可以在RAND_add()手冊頁中找到。

相關問題