在我们的代码库中找到以下代码:
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/