2017-02-11 66 views
0

據我所知,有兩種主要的Java類能夠執行僞隨機活動:Random類和SecureRandom類。兩者都產生僞隨機數。但是,SecureRandom類會生成密碼安全的數字。當您可以使用SecureRandom類時,爲什麼要使用Java的隨機類?

爲什麼即使使用Random類也可以使用SecureRandom類,這會生成更多不可預測的數字?許多程序員(尤其是視頻遊戲程序員)只使用Random類,但是這兩個類具有幾乎相同的核心方法(都可以生成僞隨機整數)。這兩個類也可以播種長期價值。

我唯一的解釋是Random類的操作速度比SecureRandom類要快。這是真的?如果不是,那麼爲什麼許多Java程序員更喜歡Random類而不是SecureRandom類?

+2

[若要開始](HTTP: //docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html):*「[...]根據實現,generateSeed和nextBytes方法**可能會阻塞**作爲熵正在收集[...]「*。此外,「隨機」提供了一個確定性的隨機序列,在大多數實現中推測其速度更快。 – aioobe

回答

1

有許多可能的原因

  • 隨機是老年人所以有更多的例子。
  • 隨機對於許多情況是足夠隨機的,並且快得多。
  • 隨機產生在所有平臺上相同的結果,始終爲種子相同的結果(默認SecureRandom的可以是不同的,如果你不也指定策略)
+1

另外,在某些測試情況下,您想重複相同的一系列隨機數。你可以通過給它相同的種子用'Random'來做到這一點。你不能用'SecureRandom'來做到這一點。 – rossum

+1

@rossum它可能與一些SecureRandom策略,但不能依靠默認策略來做到這一點。 –

相關問題