加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 比时间更好的种子(0)?

发布时间:2020-12-16 04:59:02 所属栏目:百科 来源:网络整理
导读:我明白,时间(0)通常用于播种随机数发生器,并且当程序每秒运行多次时,它只会成为问题.我想知道生成随机数时要考虑什么更好的种子.我在 Windows上阅读了关于GetTickCount,timeGetTime和Query PerformanceCounter.几乎所有操作都足够了,还是有更好的种子选择?
我明白,时间(0)通常用于播种随机数发生器,并且当程序每秒运行多次时,它只会成为问题.我想知道生成随机数时要考虑什么更好的种子.我在 Windows上阅读了关于GetTickCount,timeGetTime和Query PerformanceCounter.几乎所有操作都足够了,还是有更好的种子选择?

以下是使用boost库的快速代码示例:

#include <iostream>
#include <boost/random.hpp>
using namespace std;
using namespace boost;

int main()
{
    mt19937 randGen(42);
    uniform_int<> range(0,100);
    variate_generator<mt19937&,uniform_int<> > GetRand(randGen,range);

    for (int i = 0; i < 30; ++i)
        cout << GetRand() << endl;
}

解决方法

Netscape安全性的一些早期攻势集中在知道何时发送加密数据包,并缩小可能范围的种子的知识.所以,得到一个滴答计数或其他甚至远程确定性不是你最好的赌注.

即使使用种子,根据该种子,“随机”数的序列是确定性的.内华达州的游戏委员会调查员意识到这一点,他应该检查一些插槽,并使用这些知识赚取相当多的钱,才被抓住.

如果您需要世界级的随机性,您可以向您的系统添加硬件,提供高度随机的数字.这就是众所周知的扑克网站(至少这就是他们所说的话).

结合您的系统的一些因素,所有这些因素都可以独立快速地变化,尽可能少的可预测性,创造出非常体面的种子.对SO的相关文章的回答建议使用Guid.NewGuid().GetHashCode().由于Guid是基于一些确定性因素,包括时间,这不是种子的良好基础:

Cryptanalysis of the WinAPI GUID
generator shows that,since the
sequence of V4 GUIDs is pseudo-random,
given the initial state one can
predict up to the next 250 000 GUIDs
returned by the function
UuidCreate[2]. This is why GUIDs
should not be used in cryptography,
e.g.,as random keys.

资料来源:Wikipedia Globally Unique Identifier

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读