2012-12-04 42 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;