Java谜语:需要一个稳定的随机数,它在JVM中持久化,但在另一个JVM中是不同的

For*_*ght 0 java random jvm

我需要找到一种方法从JVM获取一个(有点)随机字符串或数字,我不必存储.但是我会在JVM的整个生命周期中多次需要它,因此对此方法的后续调用必须返回相同的值.此外,在重新启动JVM之后,相同的代码必须产生不同但仍然稳定的值.随机性的质量并不重要,只要它足够难以猜测.

And*_*mas 5

只需在不同的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)