Why use the Random Class of Java when you can Use the SecureRandom Class?
据我所知,有两个主要的Java类能够执行伪随机活动:EDCOX1的0个类和EDCOX1的1个类。两者都产生伪随机数。但是,SecureRandom类生成加密的安全数字。
当您可以使用产生更多不可预测数字的SecureRandom类时,为什么还要使用Random类?许多程序员(尤其是电子游戏程序员)只使用Random类,但这两个类的核心方法几乎相同(都可以生成一个伪随机整数)。这两个类也可以用长值作为种子。
我唯一的解释是,Random类的运行速度比SecureRandom类快。这是真的吗?如果不是,那么为什么许多Java程序员更喜欢EDCOX1 0类,而不是EDCOX1?1类?
- 首先:"[…]根据实现的不同,在收集熵时,生成的和下一个字节的方法可能会阻塞[…]"。另外,Random提供了一个确定性随机序列,在大多数实现中可能更快。
有很多可能的原因
- Random比较老,所以有更多的例子。
- 随机对于许多情况来说是足够随机的,而且速度更快。
- Random在所有平台上生成相同的结果,并且始终为种子生成相同的结果(如果不同时指定策略,则默认的SecureRandom可能不同)
- 另外,在某些测试情况下,您希望重复相同的随机数序列。你可以通过给同一粒种子来使用Random。你不能用SecureRandom来做这件事。
- @Rossum可以使用一些SecureRandom策略,但不能依赖默认策略来实现这一点。