我当然不能使用随机生成器。目前我从unixtime()+ microtime()创建一个CRC32哈希。如何为随机生成器生成良好的随机种子?
有没有比哈希时间()+ microtime()更聪明的方法?虽然我对它的结果并不完全满意,但我预计它会更随机,但我可以看到其中的强模式,直到我添加了更多的MicroTime()调用但它慢得多,米寻找一些这样做的最佳方式。
这个愚蠢的代码生成我能做出迄今为止最好的输出,计算是必要的或我可以看到在输出中的一些模式:
starthash(crc32);
addtohash(crc32, MicroTime());
addtohash(crc32, time(NULL)); // 64bit
addtohash(crc32, MicroTime()/13.37f);
addtohash(crc32, (10.0f-MicroTime())*1337.0f);
addtohash(crc32, (11130.0f-MicroTime())/1313137.0f);
endhash(crc32);
microtime中()返回程序开始后经过微秒。我已经将addtohash()重载到了每种可能的类型。
我宁愿采取非库解决方案,它可能只是~10行代码,我不想安装庞大的库,因为我实际上并不需要那么多,而且我更感兴趣在代码中,而不仅仅是从函数调用中使用它。
它是如何跨平台? :) –
种子是否“好”取决于你使用伪随机数据。如果您的唯一要求是PRNG在不同的时间输出不同的数据,那么使用时间很好。但是为了每次程序运行时播种一次PRNG,你可以使用CryptGenRandom。 –
一个好的cryprographic rng应该有播种内置。任何其他rng不需要这个。 –