我需要找到一种方法从 JVM 获取不需要存储的(某种程度上)随机字符串或数字。但在 JVM 的生命周期中我会多次需要它,因此对此方法的后续调用必须返回相同的值。此外,在 JVM 重新启动后,相同的代码必须产生不同的但仍然稳定的值。随机性的质量并不重要,只要它足够难以猜测即可。
最佳答案
只需在不同的虚拟机中以不同的方式播种随机值即可。
public class MyClass {
private int myStableRandomValue = new Random( System.currentTimeMillis() ).nextInt();
...
}
编辑:
如果您确实不想存储该值,您可以使用进程 ID 为上面的 Random 方法播种,并在每次请求该值时调用它 - if 潜在攻击者无权访问进程 ID。
private int getMyStableRandomValue() {
return new Random( getProcessID() ).nextInt();
}
关于Java之谜: need a stable random that persistes in a JVM but is different in another JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289197/