получение детерминированных значений с помощью безопасного случайного Java

1

Я пытаюсь получить одно и то же значение соли каждый раз в зависимости от значения семени. Вот код, который у меня есть

SecureRandom sr = new SecureRandom(seed.getBytes());
byte[] salt = new byte[32];
sr.nextBytes(salt);

Тем не менее, я продолжаю получать разные значения каждый раз, когда он запускается. Я что-то делаю неправильно, там что-то не хватает?

Обновить:

Хорошо, я попробовал использовать random вместо secureRandom и получить байты с использованием длинного семени, но каждый раз получаю разные значения. Однако, когда я меняю его, чтобы попытаться получить nextInt, я могу получить одинаковые значения.

Random rand = new Random(Long.parseLong(seed, 36));   
byte[] salt = new byte[32];
rand.nextBytes(salt); 

Правильно ли получается работа с одинаковыми байтами?

  • 2
    Вы, кажется, пропускаете "Secure" в "SecureRandom" ...
  • 0
    @BrettOkken Я понимаю, что secureRandom предлагает лучшую безопасность, но для моего приложения важно каждый раз выдавать один и тот же результат хеширования для данного ввода в хеш-функцию. это причина, почему я пытаюсь получить ту же соль
Теги:
hash
salt

1 ответ

2
Лучший ответ

Это намеренно. SecureRandom пытается использовать энтрофию, чтобы получить истинную случайность, которая, кстати, может быть дорогой. Он всегда будет возвращать разные значения независимо от того, с какой солью вы начинаете.

Если вы хотите детерминированные значения, используйте Random вместо этого.

  • 0
    Благодарю. Я просто попытался использовать функцию random, но я все равно получаю разные значения при каждом запуске. Вот код, который у меня есть: Random random = new Random (Long.parseLong (seed, 36)); байт [] соль = новый байт [32]; random.nextBytes (соль); я что-то упускаю?
  • 0
    Возможно, у вас есть проблемы с вашим семенем? Замените код parseLong жестко закодированной константой и запустите программу. Вы должны получать одинаковые значения каждый раз. Если это работает, вы можете выяснить, почему семя меняется. Я написал короткую программу, основанную на вашем коде и новом Random (1000L), и она последовательно выдает одни и те же байты!
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню