long long
用密码强度С++生成随机数的解决方案是什么?(允许升压)
问问题
1539 次
2 回答
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,但boost::random_device
有一个使用该平台加密服务的 Windows 实现。
于 2012-12-04T17:58:56.003 回答
3
在 linux 下,您可以从/dev/random
或/dev/urandom
它们都提供密码熵。
它们之间的区别是:/dev/random
如果熵耗尽则阻塞,因此它可能比熵慢/dev/urandom
但“更强”
所以,使用流它看起来像这样
long long n;
std::ifstream rstream ("/dev/random");
rstream >> n;
于 2012-12-04T18:00:55.243 回答