C++ 是否有一个C++;11 CSPRNG?

C++ 是否有一个C++;11 CSPRNG?,c++,c++11,random,mersenne-twister,C++,C++11,Random,Mersenne Twister,正如我们所知,梅森龙卷风: Mersenne Twister不是加密安全的。(MT基于 线性递归。由一个函数生成的任何伪随机数序列 线性递归是不安全的,因为从足够长的子序列 在输出中,可以预测其余的输出。) 但是很多来源,比如甚至。建议(逐字)使用Mersene绕口令如下: auto engine = mt19937{random_device{}()}; 它们有不同的风格,比如使用std::seed\ seq或复杂的操作方法std::tm,但这是最简单的方法 即使std::random\u设

正如我们所知,梅森龙卷风:

Mersenne Twister不是加密安全的。(MT基于 线性递归。由一个函数生成的任何伪随机数序列 线性递归是不安全的,因为从足够长的子序列 在输出中,可以预测其余的输出。)

但是很多来源,比如甚至。建议(逐字)使用Mersene绕口令如下:

auto engine = mt19937{random_device{}()};
它们有不同的风格,比如使用
std::seed\ seq
或复杂的操作方法
std::tm
,但这是最简单的方法

即使
std::random\u设备

std::random_设备
可以按照 实现定义的伪随机数引擎,如果 非确定性源(如硬件设备)不可用于 实施。在这种情况下,每个
std::random_设备
对象可能
生成相同的数字序列

/dev/uradom
/dev/random
之争


但是,虽然标准库提供了一个很好的PRNG集合,但它似乎没有提供任何CSPRNG。我更喜欢使用标准库,而不是使用POSIX、仅限Linux的头文件等。Mersenne Twister可以被操纵以使其加密安全吗?

Visual Studio保证
random\u设备
是加密安全且不确定的:

如果您想要更快或跨平台的产品,您可以使用GnuTLS: 它提供质量可调的随机数<代码>GNUTLS\u RND\u RANDOM
是你想要的,我想


正如一些人已经说过的,请忘记在加密上下文中的MT。

可以操纵Mersenne Twister使其加密安全吗?没有。@dandan78好的。我甚至还加入了无协议的URL来进行良好的度量,这些URL被破坏了,因为它们中的大多数都不能使用https。固定的now@DavidHammen我使用的链接说:“为了保证安全,你需要使用一些安全的散列算法和MT。例如,你可以收集每八个输出字,并将它们压缩成一个字(因此输出序列的长度是原始序列的1/8)。”你能详细说明还是对位?@owacoder“实现你自己的”几乎与“加密安全”背道而驰