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