С документация для SecureRandom
:
Кроме того, SecureRandom
должен выдавать недетерминированный вывод.
Поэтому любой семенной материал, переданный объекту SecureRandom
, должен быть
непредсказуемо, и все SecureRandom
выходные последовательности должны быть
криптографически стойкий, как описано в RFC 1750: случайность
Рекомендации по безопасности .
Таким образом, вы не только нарушаете требования SecureRandom
, передавая предсказуемое начальное число, но и явно требуется, чтобы вывод SecureRandom
был непредсказуемым .
Чтобы создать предсказуемую последовательность случайности, используйте Random
:
Если два экземпляра Random
созданы с одним и тем же семенем, и
та же последовательность вызовов методов сделана для каждого, они будут генерировать и
вернуть идентичные последовательности чисел.
Но учтите, что : если вы используете одно и то же начальное число каждый раз, то число всегда будет одинаковым, поэтому вы должны использовать одно и то же начальное начальное число, которое используется совместно. клиент и сервер как-то. Это начальное начальное число необходимо сбрасывать при каждом перезапуске приложения сервера.
Экземпляр Random
должен быть разделен между вызовами подпрограммы, в противном случае каждый раз будет генерироваться один и тот же номер:
public static void main(final String[] args) {
IntStream.range(1, 10)
.map(i -> new Random(42).nextInt())
.forEach(System.out::println);
}
Выход:
-1170105035
-1170105035
-1170105035
-1170105035
-1170105035
-1170105035
-1170105035
-1170105035
-1170105035
В общем, то, что вы пытаетесь сделать, - это Плохая Идея TM. Вам было бы гораздо лучше использовать асимметричную схему шифрования , а не пытаться изобретать колесо самостоятельно.