我需要找到一种方法从JVM获取一个(有点)随机字符串或数字,我不必存储.但是我会在JVM的整个生命周期中多次需要它,因此对此方法的后续调用必须返回相同的值.此外,在重新启动JVM之后,相同的代码必须产生不同但仍然稳定的值.随机性的质量并不重要,只要它足够难以猜测.
只需在不同的VM中以不同的方式播种Random.
public class MyClass {
private int myStableRandomValue = new Random( System.currentTimeMillis() ).nextInt();
...
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您确实不想存储该值,则可以使用进程ID为上面的Random方法设定种子,并在每次请求值时调用它 - 如果潜在的攻击者无法访问进程ID.
private int getMyStableRandomValue() {
return new Random( getProcessID() ).nextInt();
}
Run Code Online (Sandbox Code Playgroud)