c++ - 如何为随机生成器生成良好的随机种子?

标签 c++ visual-c++ random seed

我当然不能使用随机生成器。目前我正在从 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行代码,我不想安装巨大的库,因为我实际上并不需要那么多,而且我更感兴趣代码而不仅仅是从函数调用中使用它。

最佳答案

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

这对于您的目的来说可能有点过头了,但除非它导致性能问题,否则没有必要搞乱像时间这样的低熵源。

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

关于c++ - 如何为随机生成器生成良好的随机种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10653546/

相关文章:

java - 生成随机日期

c++ - Visual C++、wchar_t* 命令行参数无法比较?

c++ - 从 MFC 中的配置文件加载字符串

c++ - 类模板中文字运算符的Friend声明

c++ - 在 Windows 上使用 OpenSSL 通过身份验证访问 REST API

c++ - VC++ 允许为 STL 容器使用 const 类型。为什么?

Java从数字区间生成随机唯一数字

c++ - C++ 中的伯努利随机变量

c++ - 如何将 QGraphicsScene 动画渲染到电影文件中?

c++ - 如何在后台进程中处理来自 Windows 任务管理器的 "End Task"?