我使用的是 Java 1.7,如下面的代码所示(在 Ubuntu 中使用 Oracle 的 Java 7 编译器编译)java.security.SecureRandom似乎是不必要的,因为代码为两个伪随机序列的起始值生成两个不同的 BigInteger:
import java.security.SecureRandom;
import java.math.BigInteger;
public class SessionIdTest {
public static void main (String args[]) {
long seed = System.currentTimeMillis();
{
SecureRandom random = new SecureRandom();
random.setSeed(seed);
BigInteger a = new BigInteger(130, random);
System.out.println(a);
}
{
SecureRandom random = new SecureRandom();
random.setSeed(seed);
BigInteger a = new BigInteger(130, random);
System.out.println(a);
}
}
}
目的是什么setSeed然后?或者是安全随机除了种子之外,还使用其他一些随机性来源吗?
javadoc 说:
许多 SecureRandom 实现采用伪随机数生成器 (PRNG) 的形式,这意味着它们使用确定性算法从真正的随机种子生成伪随机序列。其他实现可能会产生真正的随机数,而其他实现可能会使用这两种技术的组合。
因此,如文档所述,依靠安全随机数通过播种来生成确定性的值序列不一定有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)