我需要/想要获得随机(不完全是)数字用于密码生成。
我的做法:目前我使用SecureRandom来生成它们。
我用以下方式获取对象:
SecureRandom sec = SecureRandom.getInstance("SHA1PRNG", "SUN");
然后像这样进行播种
sec.setSeed(seed);
目标: 快速创建随机数的方法,要求在加密上至少与SHA1PRNG SecureRandom实现同样安全,并且在不同版本的JRE和Android上生成的随机数相同。
EDIT: 种子是由用户输入生成的。
问题: 使用SecureRandom.getInstance("SHA1PRNG", "SUN");
会出现以下错误:java.security.NoSuchProviderException: SUN
。如果省略, "SUN"
则会生成随机数,但这些随机数与默认的(JRE 7)随机数不同。
问题: 我应该如何达到我的目标?
您不希望它是可预测的: 我需要可预测性,以便相同的先决条件产生相同的输出。如果它们不同,对于应用程序用户的期望,这就是不可能的 困难的。
EDIT: 可预测性指的是,当了解一个或一百个字节时,不能预测下一个,但当您知道种子时,应该能够预测第一个(以及所有其他随机数)。或者用另一个词来说,是可重现的。
如果有人知道更直观的方法,请告诉我!