我需要/想要获得用于密码生成的随机(嗯,不完全)数字。
我做什么:目前我正在使用SecureRandom生成它们。
我正在获取对象
SecureRandom sec = SecureRandom.getInstance("SHA1PRNG", "SUN");
然后像这样播种
sec.setSeed(seed);
目标:一种(最好是快速)创建随机数的方法,它在加密上至少与 SHA1PRNG SecureRandom 实现一样安全。这些在 JRE 和 Android 的不同版本上需要相同。
编辑:种子是从用户输入生成的。
问题:SecureRandom.getInstance("SHA1PRNG", "SUN");
它会像这样失败:
java.security.NoSuchProviderException: SUN
. 省略, "SUN"
会产生随机数,但这些与默认(JRE 7) 数字不同。
问题:我怎样才能实现我的目标?
您不希望它是可预测的:我想要,因为我需要可预测性,以便相同的先决条件产生相同的输出。如果它们不一样,那么很难做到 用户对应用程序的期望。
编辑:通过可预测我的意思是,当知道一个字节(或一百个)时,你不应该能够预测下一个字节,但是当你知道种子时,你应该能够预测第一个字节(以及所有其他字节)。也许另一个词是可重现的。
如果有人知道更直观的方法,请告诉我!