Нашел следующий код в нашей кодовой базе:
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
Самосев недостаточно хорош?Зависит ли это от того, для чего он будет использоваться?
Примечание: Для некоторого контекста он используется в классе, который создает случайные идентификаторы для вещей, хранящихся вбазы данных.