2016-04-03 75 views
0

我有下面的代碼使用ISAAC生成隨機數:如何提供種子ISAAC隨機數發生器

int main() 
{ 
    /* Initialize the structure to 0 */ 
    randctx ctx; 
    ctx.randa = ctx.randb = ctx.randc = (ub4)0; 

    /* Initialize the seed */ 
    for (ub4 i=0; i<256; ++i) { 
     ctx.randrsl[i] = i; 
    } 

    /* Initialize the random numbers from the seed */ 
    randinit(&ctx, TRUE); 

    printf("%.8lx\n", rand(&ctx)); 
} 

我得到了上面的代碼從How to use ISAAC in C

我也有一個代碼閱讀從/ dev/random獲得種子:

int myFile = open("/dev/random", O_RDONLY);    
uint32_t rand;    
uint32_t randomNum = read(myFile, &rand, sizeof(rand)) ; 
printf(" %u \n", rand); 
close(myFile); 

如何向ISAAC提供種子即rand?

由於

回答

1

當傳遞TRUE到種子從ctx.randrsl截取的randinit標誌。但我建議你使用RANDSIZsizeof(ctx.randrsl),而不是256

所以硬編碼它的價值:

ssize_t bytes_read = read(myFile, &ctx.randrsl, sizeof(ctx.randrsl)); 
if(bytes_read != sizeof(ctx.randrsl)){ printf("cannot initialize seed\n"); exit(1); } 
+0

非常感謝您的回覆!我總是得不到初始化種子。似乎bytes_read等於sizeof(ctx.randrsl)的概率非常低。有什麼辦法可以解決這個問題嗎? – user3266083

+0

@ user3266083它只是從文件讀取字節,這應該只會在不常見的情況下失敗。 'myFile'是否成功打開(應該是> = 0)? – Vasfed

+0

是文件成功打開。而且,僅供參考,我在Linux VM上運行它。 – user3266083