Java之谜: need a stable random that persistes in a JVM but is different in another JVM

标签 java random jvm

我需要找到一种方法从 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/

相关文章:

java - 在演示者之间传递控件/值,GWT 模型 View 演示者?

c++ - 如何避免相同的随机数序列

java - Liferay 6.2 迁移时的内存泄漏

java - 您什么时候需要用于 Firebase 云消息传递的应用服务器?

java - 这个 JLabel 上的什么是无效的?

ruby - 在ruby中随机选择属性值

oracle - 在 PL/SQL(oracle 9i) 中生成带有限制字母的随机字符串

java - 泛型类型存储在 java 类文件中的什么位置?

java - 可见范围项目/模块

java - 在装有 J2SE 6.0 的 Mac OS 上启动 Eclipse MAT 时 JVM 终止