我必须用相同的种子产生相同的随机,并且不能使用SecureRandom。因为即使对它使用setseed() (Android),它也会为自己播种。所以我决定用bouncycaste。我应该用什么发电机?我对此很困惑。我没有找到文档(比如指南)。谢谢你的建议。
传递种子给构造函数
你断言SecureRandom
忽略你指定的种子是不正确的。至少在Java中不是这样。(我不做Android工作。)
引用SecureRandom
的构造函数:
SecureRandom实例用指定的种子字节播种。
Android的文档也是这么说的。
下面是一些示例代码:
定义种子
byte[] seed = { 42 , 7 } ;
将种子传递给构造函数。
SecureRandom sr = new SecureRandom( seed ) ;
产生一个输出
byte[] x = new byte [ 4 ] ;
sr.nextBytes( x ) ;
分别运行该代码三次。在给定相同的种子的情况下,每次都得到相同的输出。
[20, -102, -10, -126]
[20, -102, -10, -126]
[20, -102, -10, -126]
查看此代码运行在Ideone.com。
在您的评论中您提到了SecureRandom#setSeed
方法。正如您所提到的,该方法显然是使用您指定的种子,但与现有种子结合使用:
种子是对现有种子的补充,而不是替代。
我承认setSeed
对于该方法来说是一个糟糕的名字,因为它不只是替换单个成员字段的状态。但是你指定的种子不会被忽略。
👉如果你想用SecureRandom
得到可重复的结果,通过构造函数指定一个种子。