我很困惑如何使用
1) 不使用种子的单个实例
SecureRandom
。我需要在一个循环中生成n个安全的随机数。在每次生成时,使用同一个SecureRandom实例是否安全?下面两种解决方案在加密强度方面有区别吗?1) 不使用种子的单个实例
SecureRandom sr = new SecureRandom();
for(int i = 0; i < n; ++i) sr.nextInt();
2) 每一代都要新建实例
for(int i = 0; i < n; ++i) new SecureRandom().nextInt();
3) 带有种子的单实例
SecureRandom sr = new SecureRandom()
for(int i = 0; i < n; ++i) {
byte[] seed = sr.generateSeed(32);
sr.setSeed(seed);
sr.nextInt();
}
SecureRandom
。你可以使用线性同余生成器。LCG适用于模拟,在这种情况下你需要来自均匀分布的快速数字。 - jww