在我们的代码库中找到以下代码:

public static final int DEFAULT_LENGTH = 16;
private static SecureRandom SR;
static
{
   try
   {
      SecureRandom sd0 = new SecureRandom();
      SR = new SecureRandom(sd0.generateSeed(DEFAULT_LENGTH * 2));
   }
   catch (Exception e){}
}

在这里,将创建一个默认的SecureRandom,然后将其用于为另一个种子创建种子,该种子将在以后的类(class)中使用。这真的有必要吗?因为这样做了,第二个比第一个好吗?

当第二秒生成种子时,将给出字节数,这重要吗?种子字节数量不同的SecureRandom可能更好还是更坏?用于播种的字节数是否应该与将用于的字节数相对应?



自我播种还不够好吗?它是否取决于它的用途?

注意:在某些上下文中,它用于为存储在数据库中的内容创建随机ID的类中。

最佳答案

我认为这完全没有必要,因为正如您引用的Javadoc所明确指出的那样:默认构造的SecureRandom实例将自己植入种子。写这个的人可能不知道。

它们也可能通过强制固定种子长度(实际上对于RNG实现可能不理想)来降低安全性。

最后,假设代码段未更改地发布,则静默异常吞咽也不是很好的编码风格。

关于java - 我应该播种SecureRandom吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7608089/

10-10 09:12