use*_*986 9 c++ random mersenne-twister c++11
众所周知,Mersenne Twister 不具有密码学安全性:
Mersenne Twister不具有加密安全性.(MT基于线性递归.由线性递归生成的任何伪随机数序列都是不安全的,因为从输出的足够长的子序列,可以预测其余的输出.)
但很多消息来源,如Stephan T. Lavavej甚至这个网站.建议几乎总是(逐字)使用Mersenne Twister,如下所示:
auto engine = mt19937{random_device{}()};
Run Code Online (Sandbox Code Playgroud)
它们有不同的风格,如使用std::seed_seq或复杂的操作方式std::tm,但这是最简单的方法.
即使std::random_device 并不总是可靠的:
std::random_device如果非确定性源(例如,硬件设备)对于实现不可用,则可以根据实现定义的伪随机数引擎来实现.在这种情况下,每个std::random_device对象可以生成相同的数字序列.
该/dev/urandomVS /dev/random辩论十分激烈.
但是虽然标准库提供了很好的PRNG集合,但它似乎没有提供任何CSPRNG.我更喜欢坚持使用标准库,而不是使用POSIX,仅限Linux的标题库等.Mersenne Twister可以被操作以使其加密安全吗?
Visual Studio保证random_device加密安全且不确定:https:
//msdn.microsoft.com/en-us/library/bb982250.aspx
如果你想要更快或跨平台的东西,你可以使用例如GnuTLS:http://gnutls.org/manual/html_node/Random-number-generation.html
它提供可调质量的随机数.GNUTLS_RND_RANDOM是你想要的我想的.
正如几个人已经说过的那样,请忘记密码上下文中的MT.
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |