2017-02-11 6 views
0

Как я понимаю, существуют два основных класса Java, которые могут выполнять псевдослучайные действия: класс Random и класс SecureRandom. Оба генерируют псевдослучайные числа. Однако класс SecureRandom генерирует криптографически безопасные номера.Зачем использовать случайный класс Java, когда вы можете использовать класс SecureRandom?

Почему можно использовать класс Random, если вы можете использовать класс SecureRandom, который генерирует более непредсказуемые номера? Многие программисты (особенно программисты видеоигр) используют только класс Random, но оба класса имеют почти один и тот же базовый метод (оба могут генерировать псевдослучайное целое число). Оба класса также могут быть засеяны длинным значением.

Мое единственное объяснение состоит в том, что класс Random работает быстрее, чем класс SecureRandom. Это правда? Если нет, то почему многие программисты Java предпочитают класс Random чем класс SecureRandom?

+2

[Для начала] (HTTP: //docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html): * "[...] В зависимости от реализации методы generateSeed и nextBytes ** могут блокировать ** как энтропию собирается [...] "*. Кроме того, «Случайный» обеспечивает детерминированную случайную последовательность и, по-видимому, быстрее в большинстве реализаций. – aioobe

ответ

1

Существует целый ряд возможных причин

  • Случайные старее поэтому есть несколько примеров.
  • Случайный случайный случай для многих случаев и намного быстрее.
  • Random производит тот же самый результат на всех платформах, и всегда одни и те же результаты для семян (по умолчанию SecureRandom может отличаться, если не указать стратегию)
+1

Кроме того, в некоторых тестовых ситуациях вы хотите повторить ту же серию случайных чисел. Вы можете сделать это с помощью «Случайного», предоставив ему одно и то же семя. Вы не можете сделать это с помощью «SecureRandom». – rossum

+1

@rossum возможно с некоторыми стратегиями SecureRandom, но не может полагаться на стратегию по умолчанию для этого. –