3

Java 是否SecureRandom.nextLong()返回所有可能的值,因为它继承自Random仅使用 48 位?如果没有,我是否仍然可以在 Java 中通过修改 Random 类来做到这一点以及如何做到这一点?我只想使用一个全随机长数生成器,如果可能的话,可以返回所有可能的长值。

4

1 回答 1

7

虽然 SecureRandom 继承自 Random,但它不使用相同的数学运算或具有相同的限制。它最终会产生所有可能的 64 位值。

此类提供了一个加密的强随机数生成器 (RNG)。

此类委托给许多可能的实现之一。您可以通过调用选择一个SecureRandom.getInstance(algorithm)

注意:某些实现在您的计算机中使用熵来使结果随机,而不是纯粹的伪随机。

这使用 s 48 位算法

SecureRandom 不使用其父级的任何方法,例如

/**
 * The provider implementation.
 */
private SecureRandomSpi secureRandomSpi = null;

public void nextBytes(byte[] bytes) {
    secureRandomSpi.engineNextBytes(bytes);
}

此方法委托给完全不同的实现。

相关链接如何解决缓慢的 Java `SecureRandom`?由于使用 /dev/random

于 2018-08-05T17:41:02.317 回答