Возвращает ли Java SecureRandom.nextLong()
все возможные значения, учитывая, что он наследуется от Random
, который использует только 48 бит? Если нет, могу ли я сделать это на Java, возможно, изменив класс Random и как это сделать? Я просто хочу использовать генератор случайных длинных чисел, в котором могут быть возвращены все возможные длинные значения, если это возможно.
Как сгенерировать все возможные 64-битные случайные значения в java?
Ответы (1)
Хотя SecureRandom наследуется от Random, он не использует ту же математику и не имеет таких же ограничений. В конечном итоге он выдаст все возможные 64-битные значения.
Этот класс предоставляет криптографически стойкий генератор случайных чисел (RNG).
Этот класс делегирует одну из многих возможных реализаций. Вы можете выбрать один, позвонив SecureRandom.getInstance(algorithm)
Примечание: некоторые реализации используют энтропию на вашем компьютере, чтобы сделать результаты случайными, а не чисто псевдослучайными.
здесь используется 48-битный алгоритм
SecureRandom не использует какие-либо методы своего родителя, например.
/**
* The provider implementation.
*/
private SecureRandomSpi secureRandomSpi = null;
public void nextBytes(byte[] bytes) {
secureRandomSpi.engineNextBytes(bytes);
}
Этот метод делегирует совершенно другую реализацию.
Связанная ссылка Как решить медленную Java `SecureRandom`? из-за использования /dev /случайный
Random
не является интерфейсом, но широко используется, поэтому дизайнеры решили расширить Random, но заменить его совершенно другой реализацией, но, поскольку он расширяет Random, его можно использовать в качестве замены.
- person Peter Lawrey; 05.08.2018