2012-01-26 31 views
3

爲了好玩,我一直在嘗試使用加密方法。我正在使用的一種方法需要種子價值。我想餵它真正的隨機數字。我知道在C++中獲取種子的標準方法是調用時間(NULL),但由於這只是僞隨機的,我想知道是否有任何可靠的方法來收集真正的隨機數。唯一的限制是它必須能夠在C,C++和Java中實現。在種子中創建更高級別的熵的方法

預先感謝您。

說明:當我運行Ubuntu時,此代碼必須運行Windows系統。

+0

這取決於你需要什麼和你的平臺。有一次,從用戶那裏獲得隨機鼠標移動的熵生成(密碼生成)是一種流行的方法。如果你在linux上,你可以簡單地從'/ dev/random'或'/ dev/urandom'中讀取。這真的取決於你究竟需要你的種子和你在哪裏。 – Grizzly

回答

3

其中有很多,但你已經弄糊塗了,因爲任何熵位的來源將是一個隨機數發生器。你實際上在考慮「僞隨機數」。

現在,這就是說,有許多不同的熵源方案。很多類似UNIX的系統都有一個/ dev/random,它通過對物理進程(如高速緩存大小和內存內容)進行各種魔術創建隨機數。有更強的來源使用,例如放射性衰變的事件間時間。

Fourmilab.ch提供了真實的隨機數字here

CCD保持在黑暗中work well

Lava lamps很好。

+0

謝謝你的澄清,虐待編輯。 – jozefg

+0

熔岩燈很好:-) –

+0

我認爲編輯是錯誤的,但是 - 你想用真正的隨機數來播種它,並且你想要一個不依賴於其他僞隨機數發生器的方案。可以說,/ dev/random只是僞隨機數,實際上time(NULL)根本不是隨機的,因爲它自相關性很差 - 兩秒鐘間隔,相隔100秒,只會在最低的兩位數字中有所不同。 –

1

根據您的系統,您可能有權訪問真正隨機數據的來源。例如,Linux中的/dev/random將爲您提供密碼強的隨機位源。它通常很慢,所以當你不需要真正的隨機性時,使用它來播種PRNG是使用它的好方法。

1

一些魔術與high-resolution performance counters可能會給一個好種子。尤其是,如果你考慮,多核系統,不同的CPU負載等。

+0

你有任何想法如何實現這個例如java? – jozefg

+0

他們爲您提供了有關如何在那裏使用多種語言的RTDSC的示例。然後你做適當的操作和價值(按位移等)。 – lapk

0

作爲查理馬丁提到,真正的隨機數字的好來源是從相機(視頻或靜止)。如果您使用數碼相機的最低有效位像素並將它們連接成所需長度的字符串,您將擁有一個出色的隨機數生成器。

+0

這是相當不錯的,但確實會有一些成爲自相關的條帶。鏈接到Landon的LavaRnd網站(我的答案中的第二個鏈接)解釋了他如何減少這種影響。 –