【发布时间】:2014-12-07 09:24:29
【问题描述】:
出于基准测试的目的,我希望 SecureRandom 产生确定性输出。这是否可以通过使用种子(或者可能是算法规范)来实现?
import java.security.SecureRandom;
class TestSecureRandom {
public static void main(String [] args) {
SecureRandom rnd = new SecureRandom();
rnd.setSeed(1);
System.out.println(rnd.nextInt());
}
}
对我来说,即使指定了种子,上述程序也会产生不同的值。
【问题讨论】:
-
根据其 javadoc (docs.oracle.com/javase/7/docs/api/java/security/…),它是不确定的。
setSeed只会改变它的内部状态,但它仍然是不确定的。 -
必须是
SecureRandom吗?可以是其他类型的Random(例如Random本身)吗? -
没有。编程到
interface。在代码中使用Random。