2012-12-04 121 views
-1

什么是解决方案生成随机long long加密强度С++? (允许提升)随机长长的发生器C++

+2

为什么不升压? - 它可以帮助我们理解你的限制 – Mark

+0

@Mark我需要一个没有提升的解决方案,因为它必须在linux下工作,没有预先安装boost库 – Roman

+1

在linux上,你可以从'/ dev/random'。 – zch

回答

6

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

​​

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

+1使用STD也指向再次提高(我不明白为什么人们没有默认设置升压) – gvd

+0

@gvd:很多企业做不喜欢将开源代码放到构建机器上。 –

3

在Linux下你可以从/dev/random/dev/urandom

阅读它们都提供加密的熵。它们之间

的区别是:/dev/random块,如果熵耗尽,所以它也可能比/dev/urandom慢,但就是“更强”

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

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