Как создать экземпляр предсказуемого и безопасного генератора случайных чисел, который будет генерировать согласованные случайные числа в версиях Java и операционных системах?
Следующий код используется для работы в Java 8, но больше не работает в Java 10:
import java.security.SecureRandom;
public class PredictableRandom {
public static void main(String[] args) {
PredictableRandom predictableRandom = new PredictableRandom();
predictableRandom.execute();
}
private void execute() {
SecureRandom secureRandom = new SecureRandom();
System.out.println(secureRandom.getAlgorithm());
System.out.println(secureRandom.getProvider());
long seed = 12345678L;
secureRandom.setSeed(seed);
System.out.println(secureRandom.nextLong());
SecureRandom secureRandom2 = new SecureRandom();
secureRandom2.setSeed(seed);
System.out.println(secureRandom2.nextLong());
}
}
В Java 8 - хорошо, разные случайные объекты генерируют одно и то же случайное число:
SHA1PRNG
SUN version 1.8
3325995872096263519
3325995872096263519
В Java 10 - плохо, разные случайные объекты генерируют другое случайное число:
DRBG
SUN version 10
-3526685326322256981
-2373261409119309182