Разница между java.util.Random и java.security.SecureRandom

Моя команда получила серверный код (на Java), который генерирует случайные токены, и у меня есть вопрос относительно того же самого -

Назначение этих токенов довольно чувствительно - используется для идентификатора сеанса, ссылок для сброса пароля и т. Д. Поэтому они должны быть криптографически случайными, чтобы не допустить, чтобы кто-то их угадал или применил грубую силу. Маркер является "длинным" так что это 64 бита.

Код в настоящее время используетjava.util.Random класс для генерации этих токенов. Документация ([http://docs.oracle.com/javase/7/docs/api/java/util/Random.html][1]) заjava.util.Random четко заявляет следующее:

Instances of java.util.Random are not cryptographically secure. Consider instead using SecureRandom to get a cryptographically secure pseudo-random number generator for use by security-sensitive applications.

Тем не менее, способ, которым код в настоящее время используетjava.util.Random это - это создаетjava.security.SecureRandom класс, а затем используетSecureRandom.nextLong() метод получения семян, который используется для создания экземпляраjava.util.Randomучебный класс. Тогда он используетjava.util.Random.nextLong() метод генерации токена.

Итак, мой вопрос сейчас - это все еще небезопасно, учитывая, чтоjava.util.Random в настоящее время используетсяjava.security.SecureRandom? Нужно ли изменять код, чтобы он использовалjava.security.SecureRandom исключительно для генерации токенов?

В настоящее время кодовое полеRandom один раз при запуске

Ответы на вопрос(7)

Ваш ответ на вопрос