V6109. Potentially predictable seed is used in pseudo-random number generator.
Данное диагностическое правило выявляет случаи использования псевдорандомного генератора случайных чисел, которые могут привести к недостаточно случайному распределению или предсказуемости генерируемого числа.
Случай 1.
Создание нового объекта типа 'Random' каждый раз, когда требуется случайное значение. Это неэффективно и может привести к получению чисел, которые не являются достаточно случайными, в зависимости от JDK.
Рассмотрим пример:
public void test() {
Random rnd = new Random();
}
Для большей эффективности и случайности распределения создайте один экземпляр класса 'Random', сохраните его и используйте повторно.
static Random rnd = new Random();
public void test() {
int i = rnd.nextInt();
}
Случай 2.
Анализатор обнаружил подозрительный код, инициализирующий генератор псевдослучайных чисел константным значением.
public void test() {
Random rnd = new Random(4040);
}
Числа, сгенерированные таким генератором, можно предугадать — они будут воспроизводиться снова и снова при каждом запуске программы. Чтобы этого избежать, не стоит использовать константное число. К примеру, можно воспользоваться текущим системным временем:
static Random rnd = new Random(System.currentTimeMillis());
public void test() {
int i = rnd.nextInt();
}
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности (шифрования, разграничения доступа и пр.). |
Данная диагностика классифицируется как: