2017-02-11 111 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策略,但不能依靠默认策略来做到这一点。 –

相关问题