强大的随机数生成

时间:2020-03-05 18:37:23  来源:igfitidea点击:

我正在寻找不使用特殊硬件的高性能,相当鲁棒的RNG。它可以使用数学方法(Mersenne Twister等),可以从机器"收集熵",无论如何。在Linux / etc上,我们有一个drand48(),它产生48个随机位。我想为C ++或者C使用类似的函数/类,它可以生成超过32位的随机性,并且其低阶位与高阶位的随机性相同。

它不一定是密码安全的,但一定不能使用或者基于C语言rand()或者.NET System.Random。

任何源代码,链接到源等,将不胜感激!如果失败,我应该寻找哪种类型的RNG?

解决方案:

对于C ++,Boost.Random可能就是我们想要的。它支持MT(在许多其他算法中),并且可以通过nondet_random类收集熵。一探究竟! :-)

Gnu科学库(GSL)具有大量的RN生成器,测试工具等。如果我们使用的是Linux,则它可能已在系统上可用。

注意格努科学图书馆。它是根据GPL而非LGPL许可的。

正如其他人提到的那样,Boost随机类是一个好的开始。它们的实现符合TR1的PRNG代码:

http://www.boost.org/doc/libs/1_35_0/libs/random/index.html
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

如果我们使用的是最新版本的G ++编译器,则可能会发现已经包含TR1库