2011-05-15 34 views

回答

10

你不能在軟件中生成真正的隨機數,因爲軟件是確定性的:給定一些輸入,原則上總是會產生一個可預測的輸出。因此,爲了獲得隨機數,已經發明瞭許多算法,這些算法生成的數字序列看起來是隨機的(但並不是真的 - 這就是爲什麼它們被稱爲僞隨機數)的序列。

這樣的算法從一些起始值,種子開始,然後用它做一些計算來生成下一個僞隨機數。

如果算法有什麼好處,那麼種子值應該沒有差別:在生成隨機數時,一個種子值不應該比任何其他值更好。

通常,將當前時間作爲種子值,以便每次生成一個數字序列時,都會得到不同的序列。請注意,如果您使用相同的種子值,則每次運行時都會得到相同的僞隨機數序列。

如果您使用僞隨機數來達到加密目的,您應該非常小心,因爲如果攻擊者知道種子值,那麼他可以重新生成可能危及系統安全性的隨機數序列。對於真正安全的系統,人們使用特殊的基於硬件的隨機數發生器,它可以產生真正的隨機數。 Java有一個類java.security.SecureRandom來與這樣的系統接口。

請參閱Random number generation瞭解更多關於不同算法的更多細節和信息。

+0

我會投票,但顯然我的名聲太低。 – namen 2011-05-15 08:06:29

+0

我爲你優惠。 ;-)雖然是一個很好的答案。請記住,您也可以接受答案。 – 2011-05-15 08:10:52