【问题标题】:Why use the Random Class of Java when you can Use the SecureRandom Class? [duplicate]既然可以使用 SecureRandom 类,为什么还要使用 Java 的 Random 类? [复制]
【发布时间】:2017-06-30 03:16:17
【问题描述】:

据我了解,有两个主要的 Java 类能够执行伪随机活动:Random 类和 SecureRandom 类。两者都生成伪随机数。但是,SecureRandom 类会生成加密安全数字。

当您可以使用SecureRandom 类时,为什么还要使用Random 类,它会生成更多不可预测的数字?许多程序员(尤其是视频游戏程序员)只使用Random 类,但是这两个类具有几乎相同的核心方法(都可以生成伪随机整数)。这两个类也可以使用长值作为种子。

我唯一的解释是Random 类比SecureRandom 类运行得更快。这是真的?如果不是,那么为什么许多 Java 程序员更喜欢 Random 类而不是 SecureRandom 类?

【问题讨论】:

  • To start with: "[...] 根据实现,generateSeed 和 nextBytes 方法可能会阻塞,因为正在收集熵 [...] ".此外,Random 提供确定性随机序列,并且在大多数实现中可能更快。

标签: java random cryptography


【解决方案1】:

有很多可能的原因

  • Random 比较老,所以有更多示例。
  • Random 对于许多情况来说足够随机,而且速度更快。
  • Random 在所有平台上产生相同的结果,并且对于种子始终产生相同的结果(如果您不指定策略,默认 SecureRandom 可能会有所不同)

【讨论】:

  • 另外,在某些测试情况下,您希望重复相同系列的随机数。你可以通过给Random 提供相同的种子来做到这一点。 SecureRandom 无法做到这一点。
  • @rossum 可以使用一些 SecureRandom 策略,但不能依赖默认策略来执行此操作。
猜你喜欢
  • 2015-05-20
  • 2010-09-10
  • 2013-01-06
  • 2015-09-22
  • 1970-01-01
  • 2010-10-09
  • 2015-01-18
  • 1970-01-01
相关资源
最近更新 更多