2

我当然不能为此使用随机生成器。目前我正在从 unixtime()+microtime() 创建一个 CRC32 哈希。

有没有比散列 time()+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 行代码,我不想安装庞大的库,因为我实际上并不需要那么多东西,而且我对代码比对代码更感兴趣只是从函数调用中使用它。

4

2 回答 2

3

如果有任何疑问,请从 Windows 上获取您的种子,或者从*NIX 系统上CryptGenRandom读取dev/random或读取。dev/urandom

出于您的目的,这可能有点矫枉过正,但除非它导致性能问题,否则像时间这样的低熵源是没有意义的。

它不太可能被低估。如果您正在编写真正需要高质量安全随机数据的代码,并且没有在问题中提及这一点,那么您将得到应得的 ;-)

于 2012-05-18T14:13:03.497 回答
0

您可以检查 lfsr 和伪随机生成器。通常这是一个硬件解决方案,但您可以轻松实现自己的软件 lfsr

于 2012-05-18T14:43:04.690 回答