Класс SecureRandom
- java.lang.Object
-
- java.util.Random
-
- java.security.SecureRandom
- Все реализованные интерфейсы:
- Serializable
public class SecureRandom extends Random
Этот класс предоставляет криптографически стойкий генератор случайных чисел (RNG).
Криптографически стойкое случайное число минимально соответствует статистическим тестам генератора случайных чисел, указанным в FIPS 140-2, Требования к безопасности криптографических модулей, раздел 4.9.1. Кроме того, SecureRandom должен генерировать недетерминированный вывод. Поэтому любой материал семян, переданный объекту SecureRandom, должен быть непредсказуемым, и все последовательности вывода SecureRandom должны быть криптографически сильными, как описано в RFC 1750: Рекомендации по случайности для безопасности.
Вызывающий получает экземпляр SecureRandom с помощью конструктора без аргументов или одного из getInstance методов:
SecureRandom random = new SecureRandom();
Многие реализации SecureRandom имеют вид псевдослучайного генератора (PRNG), что означает, что они используют детерминированный алгоритм для получения псевдослучайной последовательности из истинного случайного семени. Другие реализации могут генерировать истинные случайные числа, а еще другие могут использовать сочетание обоих методов.
Типичные вызывающие объекты SecureRandom вызывают следующие методы для получения случайных байтов:
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes); Вызывающие также могут вызвать generateSeed метод для генерации заданного числа байтов семян (например, для инициализации других генераторов случайных чисел):
byte seed[] = random.generateSeed(20);Примечание: В зависимости от реализации
generateSeed и nextBytes методы могут блокироваться, поскольку собирается энтропия, например, если им нужно читать из /dev/random на различных операционных системах Unix-подобных.- См. также:
-
SecureRandomSpi,Random, Сериализованная форма
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
SecureRandom() Создает генератор случайных чисел (RNG), реализующий алгоритм случайных чисел по умолчанию. | |
SecureRandom(byte[] seed) Создает генератор случайных чисел (RNG), реализующий алгоритм случайных чисел по умолчанию. | |
protected |
SecureRandom(SecureRandomSpi secureRandomSpi,
Provider provider) Создает объект SecureRandom. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
byte[] |
generateSeed(int numBytes) Возвращает заданное количество байтов семян, вычисленных с использованием алгоритма генерации семян, который этот класс использует для инициализации самого себя. |
String |
getAlgorithm() Возвращает имя алгоритма, реализованного этим объектом SecureRandom. |
static SecureRandom |
getInstance(String algorithm) Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG). |
static SecureRandom |
getInstance(String algorithm,
Provider provider) Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG). |
static SecureRandom |
getInstance(String algorithm,
String provider) Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG). |
static SecureRandom |
getInstanceStrong() Возвращает объект |
Provider |
getProvider() Возвращает поставщика этого объекта SecureRandom. |
static byte[] |
getSeed(int numBytes) Возвращает заданное количество байтов семян, вычисленных с использованием алгоритма генерации семян, который этот класс использует для инициализации самого себя. |
protected int |
next(int numBits) Генерирует целое число, содержащее заданное количество псевдослучайных битов (выровненное вправо, с ведущими нулями). |
void |
nextBytes(byte[] bytes) Генерирует заданное количество случайных байтов. |
void |
setSeed(byte[] seed) Переинициализирует этот объект генератора случайных чисел. |
void |
setSeed(long seed) Переинициализирует этот объект генератора случайных чисел с использованием восьми байтов, содержащихся в заданном |
Методы, унаследованные от класса java.util.Random
doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
SecureRandom
public SecureRandom()
Создаёт генератор псевдослучайных чисел (RNG), реализующий стандартный алгоритм.
Этот конструктор перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi из первого поставщика, который поддерживает алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается реализация по умолчанию.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в документации Java Cryptography Architecture по стандартным именам алгоритмов для получения информации о стандартных именах алгоритмов RNG.
Возвращённый объект SecureRandom не был инициализирован. Чтобы инициализировать возвращённый объект, вызовите метод setSeed. Если метод setSeed не был вызван, первый вызов метода nextBytes заставит объект SecureRandom инициализироваться сам. Эта самоинициализация не произойдёт, если ранее был вызван метод setSeed.
SecureRandom
public SecureRandom(byte[] seed)
Создаёт генератор псевдослучайных чисел (RNG), реализующий стандартный алгоритм. Объект SecureRandom инициализируется указанными байтами.
Этот конструктор перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi из первого поставщика, который поддерживает алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается реализация по умолчанию.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в документации Java Cryptography Architecture по стандартным именам алгоритмов для получения информации о стандартных именах алгоритмов RNG.
- Параметры:
-
seed- seed.
SecureRandom
protected SecureRandom(SecureRandomSpi secureRandomSpi,
Provider provider) Создаёт объект SecureRandom.
- Параметры:
-
secureRandomSpi- реализация SecureRandom. -
provider- поставщик.
Методы
getInstance
public static SecureRandom getInstance(String algorithm)
throws NoSuchAlgorithmException Возвращает объект SecureRandom, реализующий указанный алгоритм генерации псевдослучайных чисел (RNG).
Этот метод перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi из первого поставщика, который поддерживает указанный алгоритм.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
Возвращённый объект SecureRandom не был инициализирован. Чтобы инициализировать возвращённый объект, вызовите метод setSeed. Если метод setSeed не был вызван, первый вызов метода nextBytes заставит объект SecureRandom инициализироваться сам. Эта самоинициализация не произойдёт, если ранее был вызван метод setSeed.
- Параметры:
-
algorithm- имя алгоритма RNG. См. раздел SecureRandom в документации Java Cryptography Architecture по стандартным именам алгоритмов для получения информации о стандартных именах алгоритмов RNG. - Возвращает:
- новый объект SecureRandom.
- Исключения:
-
NoSuchAlgorithmException- если ни один поставщик не поддерживает реализацию SecureRandomSpi для указанного алгоритма. - С:
- 1.2
- См. также:
Provider
getInstance
public static SecureRandom getInstance(String algorithm,
String provider)
throws NoSuchAlgorithmException,
NoSuchProviderException Возвращает объект SecureRandom, реализующий указанный алгоритм генерации псевдослучайных чисел (RNG).
Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
Возвращённый объект SecureRandom не был инициализирован. Чтобы инициализировать возвращённый объект, вызовите метод setSeed. Если метод setSeed не был вызван, первый вызов метода nextBytes заставит объект SecureRandom инициализироваться сам. Эта самоинициализация не произойдёт, если ранее был вызван метод setSeed.
- Параметры:
-
algorithm- имя алгоритма RNG. См. раздел SecureRandom в документации Java Cryptography Architecture по стандартным именам алгоритмов для получения информации о стандартных именах алгоритмов RNG. -
provider- имя поставщика. - Возвращает:
- новый объект SecureRandom.
- Исключения:
-
NoSuchAlgorithmException- если реализация SecureRandomSpi для указанного алгоритма недоступна от указанного поставщика. -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности. -
IllegalArgumentException- если имя поставщика null или пустое. - С:
- 1.2
- См. также:
Provider
getInstance
public static SecureRandom getInstance(String algorithm,
Provider provider)
throws NoSuchAlgorithmException Возвращает объект SecureRandom, реализующий указанный алгоритм генерации псевдослучайных чисел (RNG).
Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от указанного объекта поставщика. Обратите внимание, что указанный объект поставщика не обязательно должен быть зарегистрирован в списке поставщиков.
Возвращённый объект SecureRandom не был инициализирован. Чтобы инициализировать возвращённый объект, вызовите метод setSeed. Если метод setSeed не был вызван, первый вызов метода nextBytes заставит объект SecureRandom инициализироваться сам. Эта самоинициализация не произойдёт, если ранее был вызван метод setSeed.
- Параметры:
-
algorithm- имя алгоритма RNG. См. раздел SecureRandom в документации Java Cryptography Architecture по стандартным именам алгоритмов для получения информации о стандартных именах алгоритмов RNG. -
provider- поставщик. - Возвращает:
- новый объект SecureRandom.
- Исключения:
-
NoSuchAlgorithmException- если реализация SecureRandomSpi для указанного алгоритма недоступна от указанного объекта поставщика. -
IllegalArgumentException- если указанный поставщик null. - С:
- 1.4
- См. также:
Provider
getProvider
public final Provider getProvider()
Возвращает поставщика этого объекта SecureRandom.
- Возвращает:
- поставщик этого объекта SecureRandom.
getAlgorithm
public String getAlgorithm()
Возвращает имя алгоритма, реализуемого этим объектом SecureRandom.
- Возвращает:
- имя алгоритма или
unknownесли имя алгоритма определить нельзя. - С:
- 1.5
setSeed
public void setSeed(byte[] seed)
Переинициализирует этот объект генератора псевдослучайных чисел. Указанный seed дополняет, а не заменяет существующий. Таким образом, повторные вызовы гарантированно не снижают случайность.
- Параметры:
-
seed- seed. - См. также:
getSeed(int)
setSeed
public void setSeed(long seed)
Переинициализирует этот объект генератора псевдослучайных чисел, используя восемь байт, содержащихся в указанном long seed. Указанный seed дополняет, а не заменяет существующий. Таким образом, повторные вызовы гарантированно не снижают случайность.
Этот метод определён для совместимости с java.util.Random.
- Переопределяет:
-
setSeedв классеRandom - Параметры:
-
seed- seed. - См. также:
getSeed(int)
nextBytes
public void nextBytes(byte[] bytes)
Генерирует заданное количество случайных байт.
Если ранее не был вызван метод setSeed, первый вызов этого метода заставит этот объект SecureRandom инициализироваться сам. Эта самоинициализация не произойдёт, если ранее был вызван метод setSeed.
- Переопределяет:
-
nextBytesв классеRandom - Параметры:
-
bytes- массив, который будет заполнен случайными байтами.
next
protected final int next(int numBits)
Генерирует целое число, содержащее указанное количество псевдослучайных бит (справа, с ведущими нулями). Этот метод переопределяет метод java.util.Random, и служит источником случайных бит для всех методов, унаследованных от этого класса (например, nextInt, nextLong, и nextFloat).
- Переопределяет:
-
nextв классеRandom - Параметры:
-
numBits- количество псевдослучайных бит для генерации, где0 <= numBits <= 32. - Возвращает:
- целое число, содержащее указанное количество псевдослучайных бит (справа, с ведущими нулями).
getSeed
public static byte[] getSeed(int numBytes)
Возвращает заданное количество байт seed, вычисленных с помощью алгоритма генерации seed, используемого этим классом для инициализации. Этот вызов может быть использован для инициализации других генераторов псевдослучайных чисел.
Этот метод включён только для обратной совместимости. Рекомендуется использовать один из альтернативных методов getInstance для получения объекта SecureRandom, а затем вызвать метод generateSeed для получения байтов seed из этого объекта.
- Параметры:
-
numBytes- количество байт seed для генерации. - Возвращает:
- байты seed.
- См. также:
setSeed(byte[])
generateSeed
public byte[] generateSeed(int numBytes)
Возвращает заданное количество байтов инициализации, вычисленных с использованием алгоритма генерации инициализации, который использует этот класс для собственной инициализации. Этот вызов может быть использован для инициализации других генераторов случайных чисел.
- Параметры:
-
numBytes- количество байтов инициализации для генерации. - Возвращает:
- байты инициализации.
getInstanceStrong
public static SecureRandom getInstanceStrong()
throws NoSuchAlgorithmException Возвращает объект SecureRandom, который был выбран с использованием алгоритмов/поставщиков, указанных в свойстве securerandom.strongAlgorithms Security.
В некоторых ситуациях требуются сильные случайные значения, например, при создании критически важных/долгоживущих секретов, таких как ключи RSA открытого/закрытого типа. Для того, чтобы помочь приложениям в выборе подходящей реализации сильного SecureRandom, в дистрибутивах Java содержится список известных реализаций сильных SecureRandom в свойстве securerandom.strongAlgorithms Security.
Каждая реализация платформы Java должна поддерживать как минимум одну реализацию сильного SecureRandom.
- Возвращает:
- реализацию сильного
SecureRandom, как указано в свойствеsecurerandom.strongAlgorithmsSecurity - Исключения:
-
NoSuchAlgorithmException- если алгоритм недоступен - С:
- 1.8
- См. также:
Security.getProperty(String)
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.