我当然不能使用随机发生器。目前我正在从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行代码,我不想安装大型库因为我实际上并不需要这么多东西,而且我对它更感兴趣代码,而不仅仅是从函数调用中使用它。
答案 0 :(得分:3)
如果有任何疑问,请在Windows上从CryptGenRandom
获取种子,或者在* NIX系统上阅读dev/random
或dev/urandom
。
这对你的目的来说可能有点过头了,但是除非它导致性能问题,否则就像时间一样搞乱低熵源。
这不太可能是不足的。如果您正在编写真正需要高质量安全随机数据的代码,并且在问题中没有提及,那么,您得到的是您应得的; - )
答案 1 :(得分:0)
你可以查看lfsr&伪随机生成器..通常这是一个难以解决的解决方案,但您可以轻松实现自己的软件lfsr