Класс SecureRandom
- Все реализуемые интерфейсы:
Serializable, RandomGenerator
public class SecureRandom extends Random
Криптографически стойкий генератор случайных чисел как минимум соответствует статистическим тестам генератора случайных чисел, указанным в FIPS 140-2, требования безопасности к криптографическим модулям, раздел 4.9.1. Кроме того, SecureRandom должен выдавать недетерминированный результат. Поэтому любые начальные данные, передаваемые объекту SecureRandom, должны быть непредсказуемыми, а все выходные последовательности SecureRandom должны быть криптографически стойкими, как описано в RFC 4086: требования к случайности для обеспечения безопасности.
Многие реализации SecureRandom представляют собой генераторы псевдослучайных чисел (PRNG, также известные как генераторы детерминированных случайных битов или DRBG), то есть используют детерминированный алгоритм для формирования псевдослучайной последовательности на основе случайного начального значения. Другие реализации могут выдавать истинно случайные числа, а некоторые используют сочетание обоих методов.
Вызывающий код получает экземпляр SecureRandom с помощью конструктора без аргументов или одного из методов getInstance. Например:
SecureRandom r1 = new SecureRandom();
SecureRandom r2 = SecureRandom.getInstance("NativePRNG");
SecureRandom r3 = SecureRandom.getInstance("DRBG",
DrbgParameters.instantiation(128, RESEED_ONLY, null)); Третий оператор выше возвращает объект SecureRandom указанного алгоритма, поддерживающий заданные параметры создания экземпляра. Фактические параметры создания экземпляра реализации должны соответствовать этому минимальному запросу, но не обязательно совпадать с ним. Например, даже если запрос не требует определенной функции, фактический экземпляр может ее предоставлять. Реализация может отложить создание экземпляра SecureRandom до момента его фактического использования, но фактические параметры создания экземпляра должны быть определены сразу после его создания, а getParameters() должен всегда возвращать один и тот же результат без изменений.
Обычно вызывающий код SecureRandom вызывает следующие методы для получения случайных байтов:
SecureRandom random = new SecureRandom(); byte[] bytes = new byte[20]; random.nextBytes(bytes);
Вызывающий код также может вызвать метод generateSeed(int), чтобы сгенерировать заданное количество байтов начального значения (например, для инициализации других генераторов случайных чисел):
byte[] seed = random.generateSeed(20);
Созданный объект PRNG SecureRandom не инициализирован (за исключением случая, когда он создан с помощью SecureRandom(byte[])). Первый вызов nextBytes заставит его инициализироваться из источника энтропии, определяемого реализацией. Такая автоматическая инициализация не выполняется, если ранее был вызван setSeed.
SecureRandom можно повторно инициализировать в любое время, вызвав метод reseed или setSeed. Метод reseed считывает данные энтропии из своего источника энтропии для повторной инициализации. Метод setSeed требует, чтобы вызывающий код предоставил начальное значение.
Обратите внимание, что reseed может поддерживаться не всеми реализациями SecureRandom.
Некоторые реализации SecureRandom могут принимать параметр SecureRandomParameters в методах nextBytes(byte[], SecureRandomParameters) и reseed(SecureRandomParameters) для дополнительного управления поведением методов.
Примечание. В зависимости от реализации методы generateSeed, reseed и nextBytes могут блокироваться при сборе энтропии, например, если источником энтропии является /dev/random в различных Unix-подобных операционных системах.
Потокобезопасность
ОбъектыSecureRandom безопасно использовать одновременно из нескольких потоков.- Требования к реализации:
- Поставщик службы
SecureRandomможет объявить ее потокобезопасной, установив для атрибута поставщика службы "ThreadSafe" значение "true" при регистрации поставщика. В противном случае этот класс будет синхронизировать доступ к следующим методам реализацииSecureRandomSpi: - Начиная с версии:
- 1.1
- Внешние спецификации
- См. также:
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создает криптографически стойкий генератор случайных чисел (ГСЧ), реализующий алгоритм генерации случайных чисел по умолчанию. |
||
| Создает криптографически стойкий генератор случайных чисел (ГСЧ), реализующий алгоритм генерации случайных чисел по умолчанию. |
||
protected |
Создает объект SecureRandom. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
byte[] |
generateSeed |
Возвращает заданное количество байтов начального значения, вычисленных с помощью алгоритма генерации начального значения, который этот класс использует для собственной инициализации. |
String |
getAlgorithm() |
Возвращает имя алгоритма, реализованного этим объектом SecureRandom. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (ГСЧ). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (ГСЧ). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (ГСЧ). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (ГСЧ) и поддерживающий указанный запрос SecureRandomParameters. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (ГСЧ) и поддерживающий указанный запрос SecureRandomParameters. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора случайных чисел (ГСЧ) и поддерживающий указанный запрос SecureRandomParameters. |
static SecureRandom |
getInstanceStrong() |
Возвращает объект SecureRandom, выбранный с использованием алгоритмов/поставщиков, указанных в свойстве
securerandom.strongAlgorithms Security. |
SecureRandomParameters |
getParameters() |
Возвращает фактические параметры SecureRandomParameters для этого экземпляра SecureRandom. |
final Provider |
getProvider() |
Возвращает поставщика этого объекта SecureRandom. |
static byte[] |
getSeed |
Возвращает заданное количество байтов начального значения, вычисленных с помощью алгоритма генерации начального значения, который этот класс использует для собственной инициализации. |
protected final int |
next |
Генерирует целое число, содержащее указанное пользователем количество псевдослучайных битов (с выравниванием по правому краю и начальными нулями). |
void |
nextBytes |
Генерирует указанное пользователем количество случайных байтов. |
void |
nextBytes |
Генерирует указанное пользователем количество случайных байтов с дополнительными параметрами. |
void |
reseed() |
Повторно инициализирует SecureRandom данными энтропии, считанными из его источника энтропии. |
void |
reseed |
Повторно инициализирует SecureRandom данными энтропии, считанными из его источника энтропии, с дополнительными параметрами. |
void |
setSeed |
Повторно инициализирует этот объект генератора случайных чисел заданным начальным значением. |
void |
setSeed |
Повторно инициализирует этот объект генератора случайных чисел, используя восемь байтов, содержащихся в указанном long seed. |
String |
toString() |
Возвращает человекочитаемое строковое представление этого объекта SecureRandom. |
Методы, объявленные в классе Random
doubles, doubles, doubles, doubles, from, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе RandomGenerator
equiDoubles, isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong
Подробное описание конструкторов
SecureRandom
public SecureRandom()
Этот конструктор перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi первого поставщика, поддерживающего алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается реализация по умолчанию, зависящая от реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
Информацию о стандартных именах алгоритмов RNG см. в разделе SecureRandom спецификации стандартных имен алгоритмов безопасности Java.
- Внешние спецификации
SecureRandom
public SecureRandom(byte[] seed)
SecureRandom инициализируется указанными байтами начального значения. Этот конструктор перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi первого поставщика, поддерживающего алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается реализация по умолчанию, зависящая от реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
Информацию о стандартных именах алгоритмов RNG см. в разделе SecureRandom спецификации стандартных имен алгоритмов безопасности Java.
- Параметры:
-
seed— начальное значение. - Исключения:
-
NullPointerException— еслиseedимеет значениеnull - Внешние спецификации
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().
- Примечание по реализации:
- Эталонная реализация JDK дополнительно использует свойство
jdk.security.provider.preferredSecurity, чтобы определить предпочтительный порядок поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). - Параметры:
-
algorithm— имя алгоритма RNG. Информацию о стандартных именах алгоритмов RNG см. в разделеSecureRandomспецификации стандартных имен алгоритмов безопасности Java. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
NoSuchAlgorithmException— если ни одинProviderне поддерживает реализациюSecureRandomSpiдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 1.2
- Внешние спецификации
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG). Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm— имя алгоритма RNG. Информацию о стандартных именах алгоритмов RNG см. в разделеSecureRandomспецификации стандартных имен алгоритмов безопасности Java. -
provider— имя поставщика. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException— если имя поставщика равноnullили является пустым -
NoSuchAlgorithmException— если у указанного поставщика недоступна реализацияSecureRandomSpiдля указанного алгоритма -
NoSuchProviderException— если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 1.2
- Внешние спецификации
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG). Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
algorithm— имя алгоритма RNG. Информацию о стандартных именах алгоритмов RNG см. в разделеSecureRandomспецификации стандартных имен алгоритмов безопасности Java. -
provider— поставщик. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException— если указанный поставщик имеет значениеnull -
NoSuchAlgorithmException— если у указанного объектаProviderнедоступна реализацияSecureRandomSpiдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 1.4
- Внешние спецификации
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Этот метод перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi первого поставщика, поддерживающего указанный алгоритм и указанный параметр SecureRandomParameters.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание по реализации:
- Эталонная реализация JDK дополнительно использует свойство
jdk.security.provider.preferred, чтобы определить предпочтительный порядок поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). - Параметры:
-
algorithm— имя алгоритма RNG. Информацию о стандартных именах алгоритмов RNG см. в разделеSecureRandomспецификации стандартных имен алгоритмов безопасности Java. -
params— параметрSecureRandomParameters, который должен поддерживать вновь созданный объектSecureRandom. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException— если указанный параметр имеет значениеnull -
NoSuchAlgorithmException— если ни один поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 9
- Внешние спецификации
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm— имя алгоритма RNG. Информацию о стандартных именах алгоритмов RNG см. в разделеSecureRandomспецификации стандартных имен алгоритмов безопасности Java. -
params— параметрSecureRandomParameters, который должен поддерживать вновь созданный объектSecureRandom. -
provider— имя поставщика. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException— если имя поставщика равноnullили является пустым либо параметр имеет значениеnull -
NoSuchAlgorithmException— если указанный поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NoSuchProviderException— если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 9
- Внешние спецификации
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, Provider provider) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора случайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
algorithm— имя алгоритма RNG. Информацию о стандартных именах алгоритмов RNG см. в разделеSecureRandomспецификации стандартных имен алгоритмов безопасности Java. -
params— параметрSecureRandomParameters, который должен поддерживать вновь созданный объектSecureRandom. -
provider— поставщик. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException— если указанный поставщик или параметр имеет значениеnull -
NoSuchAlgorithmException— если указанный поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 9
- Внешние спецификации
- См. также:
getProvider
public final Provider getProvider()
SecureRandom.- Возвращает:
- поставщика этого объекта
SecureRandom.
getAlgorithm
public String getAlgorithm()
SecureRandom.- Возвращает:
- имя алгоритма или
unknown, если имя алгоритма невозможно определить. - Начиная с:
- 1.5
toString
getParameters
public SecureRandomParameters getParameters()
SecureRandomParameters для этого экземпляра SecureRandom. Возвращаемое значение может отличаться от объекта SecureRandomParameters, переданного в метод getInstance, но оно не может измениться в течение всего срока существования этого объекта SecureRandom.
Вызывающий код может использовать возвращаемое значение, чтобы определить, какие функции поддерживает этот SecureRandom.
- Возвращает:
- эффективные параметры
SecureRandomParametersилиnull, если параметры не использовались. - Начиная с:
- 9
- См. также:
setSeed
public void setSeed(byte[] seed)
Генератор псевдослучайных чисел SecureRandom не будет автоматически инициализирован, если setSeed вызван до любых вызовов nextBytes или reseed. Вызывающий код должен убедиться, что аргумент seed содержит достаточно энтропии для обеспечения безопасности этого SecureRandom.
- Параметры:
-
seed— начальное значение. - Исключения:
-
NullPointerException— еслиseedимеет значениеnull - См. также:
setSeed
public void setSeed(long seed)
long seed. Указанное начальное значение дополняет, а не заменяет существующее. Таким образом, гарантируется, что повторные вызовы никогда не приведут к снижению случайности. Генератор псевдослучайных чисел SecureRandom не будет автоматически инициализирован, если setSeed вызван до любых вызовов nextBytes или reseed. Вызывающий код должен убедиться, что аргумент seed содержит достаточно энтропии для обеспечения безопасности этого SecureRandom.
Этот метод определен для совместимости с java.util.Random.
nextBytes
public void nextBytes(byte[] bytes)
- Определено в:
-
nextBytesв интерфейсеRandomGenerator - Переопределяет:
-
nextBytesв классеRandom - Параметры:
-
bytes— массив, который будет заполнен случайными байтами. - Исключения:
-
NullPointerException— еслиbytesимеет значениеnull
nextBytes
public void nextBytes(byte[] bytes, SecureRandomParameters params)
- Параметры:
-
bytes— массив, который будет заполнен случайными байтами -
params— дополнительные параметры - Исключения:
-
NullPointerException— еслиbytesимеет значениеnull -
UnsupportedOperationException— если базовая реализация поставщика не переопределила этот метод -
IllegalArgumentException— еслиparamsимеет значениеnull, является недопустимым или не поддерживается этимSecureRandom - Начиная с:
- 9
next
protected final int next(int numBits)
java.util.Random и служит источником случайных битов для всех методов, унаследованных от этого класса (например, nextInt, nextLong и nextFloat).getSeed
public static byte[] getSeed(int numBytes)
Этот метод включен только для обратной совместимости. Рекомендуется использовать один из альтернативных методов getInstance для получения объекта SecureRandom, а затем вызвать метод generateSeed, чтобы получить байты начального значения из этого объекта.
- Параметры:
-
numBytes— количество генерируемых байтов начального значения. - Возвращает:
- байты начального значения.
- Исключения:
-
IllegalArgumentException— еслиnumBytesотрицательно - См. также:
generateSeed
public byte[] generateSeed(int numBytes)
- Параметры:
-
numBytes— количество генерируемых байтов начального значения. - Возвращает:
- байты начального значения.
- Исключения:
-
IllegalArgumentException— еслиnumBytesотрицательно
getInstanceStrong
public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmException
SecureRandom, выбранный с использованием алгоритмов и поставщиков, указанных в свойстве
securerandom.strongAlgorithms Security. В некоторых ситуациях требуются криптографически стойкие случайные значения, например при создании секретов высокой ценности или с длительным сроком действия, таких как открытые и закрытые ключи RSA. Чтобы помочь приложениям выбрать подходящую криптографически стойкую реализацию SecureRandom, дистрибутивы Java включают список известных криптографически стойких реализаций SecureRandom в свойстве безопасности securerandom.strongAlgorithms.
Каждая реализация платформы Java должна поддерживать по крайней мере одну криптографически стойкую реализацию SecureRandom.
- Возвращает:
- криптографически стойкую реализацию
SecureRandom, указанную свойством безопасностиsecurerandom.strongAlgorithms - Исключения:
-
NoSuchAlgorithmException— если ни один алгоритм не доступен - Начиная с:
- 1.8
- См. также:
reseed
public void reseed()
SecureRandom энтропией, полученной из его источника энтропии.- Исключения:
-
UnsupportedOperationException— если базовая реализация поставщика не переопределила этот метод. - Начиная с:
- 9
reseed
public void reseed(SecureRandomParameters params)
SecureRandom энтропией, полученной из его источника энтропии, с дополнительными параметрами. Обратите внимание, что энтропия получается из источника энтропии. Хотя некоторые данные в params могут содержать энтропию, их основное назначение — обеспечивать разнообразие.
- Параметры:
-
params— дополнительные параметры - Исключения:
-
UnsupportedOperationException— если базовая реализация поставщика не переопределила этот метод. -
IllegalArgumentException— еслиparamsимеет значениеnull, является недопустимым или не поддерживается этимSecureRandom - Начиная с:
- 9
© 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/SecureRandom.html