Должен ли я засеять SecureRandom?

В нашей базе кода обнаружен следующий код:

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 , которое затем используется для создания начального числа для другого, которое является будет использоваться позже в классе. Это действительно необходимо? Разве второй в чем-то лучше первого, потому что это сделано?

Когда генерируется семя для второго, дается количество байтов, это важно? Может ли SecureRandom , заполненный другим количеством байтов, быть лучше или хуже? Должно ли количество байтов, используемых для заполнения, каким-либо образом соответствовать тому, для чего он будет использоваться?

Если setSeed не вызывается, первый вызов nextBytes заставит объект SecureRandom заполнить сам себя. Это самозаполнение не произойдет, если ранее был вызван setSeed. - javadoc

Разве самозаполнение недостаточно? Зависит ли это от того, для чего он будет использоваться?


Примечание: Для некоторого контекста он используется в классе, который создает случайные идентификаторы для вещей, хранящихся в базе данных.

25
задан Svish 30 September 2011 в 09:03
поделиться