随机长long生成器C ++

时间:2012-12-04 17:53:48

标签: c++ random int64

使用加密强度С++生成随机long long的解决方案是什么? (允许加强)

2 个答案:

答案 0 :(得分:6)

<random>标头提供对随机数设施的便携式访问,包括可能的加密pRNG。

#include <random>     // random_device, uniform_int_distribution
#include <algorithm>  // generate_n
#include <iterator>   // ostream_iterator
#include <iostream>   // cout
#include <functional> // bind, ref

int main() {
    std::random_device r;
    std::uniform_int_distribution<long long> dist;

    std::generate_n(std::ostream_iterator<long long>(std::cout, "\n"), 10,
        std::bind(dist,std::ref(r)));
}

std::random_device可能不是所有实施的加密pRNG,因此您必须检查您的实施文档。特别是2012年之前的VC ++并没有提供非确定性的实现。 VC ++ 2012及更高版本使用Windows加密服务实现了这一功能。

其他操作系统(如Linux或Mac OS X)上的实现通常可以使用“/ dev / urandom”或“/ dev / random”或通过文件系统公开的任何其他随机设备。例如。 libc ++默认使用“/ dev / urandom”,在OS X上使用Yarrow算法。

我知道你排除了提升,但boost::random_device有一个使用该平台加密服务的Windows实现。

答案 1 :(得分:3)

在Linux下,您可以阅读/dev/random/dev/urandom

它们都提供加密熵。

它们之间的区别是:/dev/random阻止熵耗尽,因此它可能比/dev/urandom慢但是“更强”

因此,使用流将看起来像这样

long long n;
std::ifstream rstream ("/dev/random");
rstream >> n;