java - 跨版本和平台的一致随机数

标签 java android random random-seed

我需要/想要随机(好吧,不完全是)数字来生成密码。

我做什么:目前我正在用 SecureRandom 生成它们.
我正在获取对象

SecureRandom sec = SecureRandom.getInstance("SHA1PRNG", "SUN");

然后像这样播种

sec.setSeed(seed);

目标:一种(最好是快速的)创建随机数的方法,它在密码学上至少像 SHA1PRNG SecureRandom 实现一样安全。这些在不同版本的 JRE 和 Android 上必须相同。

编辑:种子是根据用户输入生成的。

问题:SecureRandom.getInstance("SHA1PRNG", "SUN"); 失败如下: java.security.NoSuchProviderException:太阳。省略 ,“SUN” 会生成随机数,但它们与默认 (JRE 7) 数字不同。

问题:我怎样才能实现我的目标

您不希望它是可预测的:我想要,因为我需要可预测性以便相同的前提条件产生相同的输出。如果它们不相同,则不可能 很难执行用户对应用程序的期望。

编辑:我所说的可预测是指,当知道一个字节(或一百个)时,你不应该能够预测下一个,但是当你知道种子时,你应该能够预测第一个(以及所有其他字节) ).也许另一个词是可重现

如果有人知道更直观的方法,请告诉我!

最佳答案

我最终将 Sha1Prng 从 sun 源中分离出来,这保证了在所有版本的 Java 和 android 上的再现性。我需要删除一些重要的方法以确保与 android 的兼容性,因为 android 无法访问 nio 类...

关于java - 跨版本和平台的一致随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906336/

相关文章:

java - TomEE 启动但 Netbeans 给出 "Failed to start"错误

java - 如何在android studio中将变量名作为参数传递

android - 从相机拍摄时图片/图像质量低

python - 使用 python/numpy 从索引集中采样

php - 为忘记密码生成随机 token 的最佳实践

java - 帮助完成排列类

java - !list.isEmpty() 和 list.size()>0 是否相等?

android - 如何为android sdk管理器设置代理?

android - Google APIs Intel x86 Atom System Image (Android Studio) 的未知错误

java - 生成具有特定 6 位小数的随机 double