Dig*_*oss 11
一个通常生成伪随机数而不是实际随机数,尽管两者都可能以不同的速率生成.
根据序列是否将用于加密目的,有两种常规类别.主要区别在于序列中一个数字的知识是否允许预测下一个数字.通用RNG不担心算法的知识是否允许观察者复制序列,并且它们运行得更快.
典型的通用RNG算法是Mersenne Twister.各种算法有许多公共实现.在这里看一个.
如果MT需要太多内存,那么线性同余生成器就会产生一半中等回退.(MT直到1997年才被发明.)这个生成器有一些问题,但它几乎不需要内存,几乎没有代码,而且速度非常快.实现无处不在,Knuth的Seminumerical Algorithms详细介绍了它.
要为任何RNG播种,你需要一个熵源,请参阅http://en.wikipedia.org/wiki/Entropy_ ( computing)(注意:SO对该链接中的()感到困惑.)这通常是由CPU可以观察的定时事件导出,例如击键(我猜这对你不起作用)中断和数据包到达.实时时钟通常是可接受的来源,如果它保持自己的状态,因为重新启动很少以任何顺序计时.