ovu*_*tin 8 java security random cryptography
我对使用它有点困惑SecureRandom.我需要在循环中生成n个 安全随机数.为每一代使用相同的SecureRandom实例是否安全?以下解决方案在加密强度方面有什么区别吗?
1)没有播种的单个实例
SecureRandom sr = new SecureRandom();
for(int i = 0; i < n; ++i) sr.nextInt();
Run Code Online (Sandbox Code Playgroud)
2)每一代的新实例
for(int i = 0; i < n; ++i) new SecureRandom().nextInt();
Run Code Online (Sandbox Code Playgroud)
3)带有播种的单个实例
SecureRandom sr = new SecureRandom()
for(int i = 0; i < n; ++i) {
byte[] seed = sr.generateSeed(32);
sr.setSeed(seed);
sr.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
Ell*_*sch 11
也许与直觉相反,第三种几乎肯定是最弱的,重复循环迭代是一个可怕的想法.第二个是糟糕的,但不那么糟糕,因为它SecureRandom()包含一个强大的默认播种策略.正如所提出的,第一个几乎肯定是最安全的,因为它最大化了熵期.因为这个原因,我建议你将它提取到类级别常量.
private static final Random RANDOM = new SecureRandom();
// ...
// your method,
for (int i = 0; i < n; ++i) {
int num = RANDOM.nextInt();
}
Run Code Online (Sandbox Code Playgroud)