【发布时间】:2012-03-08 00:39:00
【问题描述】:
两个以相同值作为种子的java.security.SecureRandom 实例最初会给出相同的随机数序列吗?
我问这个是因为我希望客户端和服务器中的随机数序列相同。如果他们都使用相同的种子值怎么办。序列是否相同,或者有什么方法可以使序列相同?
【问题讨论】:
两个以相同值作为种子的java.security.SecureRandom 实例最初会给出相同的随机数序列吗?
我问这个是因为我希望客户端和服务器中的随机数序列相同。如果他们都使用相同的种子值怎么办。序列是否相同,或者有什么方法可以使序列相同?
【问题讨论】:
来自the API docs:
如果
Random的两个实例使用相同的种子创建,并且为每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
【讨论】:
SecureRandom 是 Random 的子类,我相信 API 中的这句话仍然适用。根据种子的定义,两个具有相同种子的随机生成器将提供相同的输出——这就是种子的全部点。
java.security.SecureRandom 的行为取决于所选的实现,而java.util.Random 的行为如前所述。
如果他们都使用相同的种子值怎么办。顺序会一样吗?
不,他们绝对不会。至少在 Oracle 的 Java 7 SDK 实现中没有。请参阅我的示例代码in this SO post。除了提供的种子之外,实现似乎还可以选择使用其他随机源。
【讨论】: