Bouncy Castle我应该使用哪个随机生成器?



我必须用相同的种子产生相同的随机,并且不能使用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得到可重复的结果,通过构造函数指定一个种子。

最新更新