Класс SecureRandom
- Все реализованные интерфейсы:
-
Serializable,RandomGenerator
public class SecureRandom extends Random
Криптографически стойкий генератор псевдослучайных чисел минимально соответствует статистическим тестам генераторов псевдослучайных чисел, указанным в FIPS 140-2, Требования безопасности к криптографическим модулям, раздел 4.9.1. Кроме того, SecureRandom должен генерировать недетерминированный выход. Поэтому любой материал, используемый для инициализации объекта SecureRandom, должен быть непредсказуемым, а все последовательности SecureRandom вывода должны быть криптографически стойкими, как описано в RFC 4086: Требования к случайности для безопасности.
Многие реализации SecureRandom представляют собой псевдогенератор псевдослучайных чисел (ПГПЧ, также известный как генератор детерминированных случайных бит), что означает, что они используют детерминированный алгоритм для получения псевдослучайной последовательности из случайного значения. Другие реализации могут генерировать истинные случайные числа, а еще другие могут использовать комбинацию обоих подходов.
Вызывающий получает экземпляр 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);
Недавно созданный объект ПГПЧ 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
- Внешние спецификации
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создаёт генератор псевдослучайных чисел (RNG) с защитой, реализующий по умолчанию алгоритм генерации псевдослучайных чисел. |
||
| Создаёт генератор псевдослучайных чисел (RNG) с защитой, реализующий по умолчанию алгоритм генерации псевдослучайных чисел. |
||
protected |
Создаёт объект SecureRandom. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
byte[] |
generateSeed |
Возвращает заданное количество байтов-семян, вычисленных с использованием алгоритма генерации семян, используемого этим классом для инициализации. |
String |
getAlgorithm() |
Возвращает имя алгоритма, реализованного этим объектом SecureRandom. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, который был выбран с использованием алгоритмов/поставщиков, указанных в свойстве
securerandom.strongAlgorithms Security. |
static SecureRandom |
getInstanceStrong() |
Возвращает эффективные параметры SecureRandomParameters для этого объекта SecureRandom. |
SecureRandomParameters |
getParameters() |
Возвращает поставщика этого объекта SecureRandom. |
final Provider |
getProvider() |
Возвращает заданное количество байтов-семян, вычисленных с использованием алгоритма генерации семян, используемого этим классом для инициализации. |
static byte[] |
getSeed |
Генерирует целое число, содержащее заданное пользователем количество псевдослучайных бит (справа, с ведущими нулями). |
protected final int |
next |
Генерирует заданное пользователем количество случайных байтов. |
void |
nextBytes |
Генерирует заданное пользователем количество случайных байтов с дополнительными параметрами. |
void |
nextBytes |
Переинициализирует этот объект SecureRandom с энтропией, считанной из его источника энтропии. |
void |
reseed() |
Переинициализирует этот объект SecureRandom с энтропией, считанной из его источника энтропии с дополнительными параметрами. |
void |
reseed |
Переинициализирует этот объект с заданным семеном. |
void |
setSeed |
Переинициализирует этот случайный объект, используя восемь байтов, содержащихся в заданном long seed. |
void |
setSeed |
Возвращает удобочитаемую строку, представляющую этот объект SecureRandom. |
Методы, объявленные в классе java.util.Random
doubles, doubles, doubles, doubles, from, 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, wait, wait, wait
Методы, объявленные в интерфейсе java.util.random.RandomGenerator
equiDoubles, isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong
Подробное описание конструкторов
SecureRandom
public SecureRandom()
Этот конструктор перебирает список зарегистрированных поставщиков безопасности, начиная с самого предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от первого поставщика, поддерживающего алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается реализация по умолчанию, специфичная для реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в Спецификации имен стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов RNG.
SecureRandom
public SecureRandom(byte[] seed)
SecureRandom инициализируется указанными байтами-семенами. Этот конструктор перебирает список зарегистрированных поставщиков безопасности, начиная с самого предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от первого поставщика, поддерживающего алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается реализация по умолчанию, специфичная для реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в Спецификации имен стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов RNG.
- Параметры:
-
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 Reference Implementation дополнительно использует свойство
jdk.security.provider.preferredSecurityдля определения порядка предпочтительных поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методомSecurity.getProviders(). - Параметры:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации имен стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов RNG. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
NoSuchAlgorithmException- если ни один поставщик не поддерживает реализацию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. См. разделSecureRandomв Спецификации имен стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов RNG. -
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. См. разделSecureRandomв Спецификации имен стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов RNG. -
provider- поставщик. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если указанный поставщик являетсяnull -
NoSuchAlgorithmException- если реализацияSecureRandomSpiдля указанного алгоритма недоступна от указанного объектаProvider -
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 Reference Implementation дополнительно использует свойство
jdk.security.provider.preferredдля определения порядка предпочтительных поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методомSecurity.getProviders(). - Параметры:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации имен стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов RNG. -
params-SecureRandomParameters, который должен поддерживать вновь созданный объектSecureRandom. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если указанный params является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().
- Parameters:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
params-SecureRandomParameters, которое должен поддерживать вновь созданный объектSecureRandom. -
provider- имя поставщика. - Returns:
- новый объект
SecureRandom - Throws:
-
IllegalArgumentException- если имя поставщикаnullили пустое, или paramsnull -
NoSuchAlgorithmException- если указанный поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException- еслиalgorithmявляетсяnull - Since:
- 9
- See Also:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, Provider provider) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Parameters:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
params-SecureRandomParameters, которое должен поддерживать вновь созданный объектSecureRandom. -
provider- поставщик. - Returns:
- новый объект
SecureRandom - Throws:
-
IllegalArgumentException- если указанный поставщик или paramsnull -
NoSuchAlgorithmException- если указанный поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NullPointerException- еслиalgorithmявляетсяnull - Since:
- 9
- See Also:
getProvider
public final Provider getProvider()
SecureRandom.- Returns:
- поставщик этого объекта
SecureRandom.
getAlgorithm
public String getAlgorithm()
SecureRandom.- Returns:
- имя алгоритма или
unknown, если имя алгоритма определить невозможно. - Since:
- 1.5
toString
getParameters
public SecureRandomParameters getParameters()
SecureRandomParameters для этого экземпляра SecureRandom. Возвращаемое значение может отличаться от объекта SecureRandomParameters, переданного методу getInstance, но не может изменяться в течение жизненного цикла этого объекта SecureRandom.
Вызывающий код может использовать возвращаемое значение, чтобы определить, какие функции поддерживает этот объект SecureRandom.
- Returns:
- эффективные параметры
SecureRandomParameters, илиnull, если параметры не использовались. - Since:
- 9
- See Also:
setSeed
public void setSeed(byte[] seed)
PRNG SecureRandom не будет инициализироваться автоматически, если setSeed вызывается до вызова nextBytes или reseed. Вызывающий код должен убедиться, что аргумент seed содержит достаточно энтропии для безопасности этого объекта SecureRandom.
- Parameters:
-
seed- seed. - Throws:
-
NullPointerException- еслиseedявляетсяnull - See Also:
setSeed
public void setSeed(long seed)
long seed. Заданный seed дополняет, а не заменяет, существующий seed. Таким образом, повторные вызовы гарантированно не уменьшат случайность. PRNG SecureRandom не будет инициализироваться автоматически, если setSeed вызывается до вызова nextBytes или reseed. Вызывающий код должен убедиться, что аргумент seed содержит достаточно энтропии для безопасности этого объекта SecureRandom.
Этот метод определен для совместимости с java.util.Random.
nextBytes
public void nextBytes(byte[] bytes)
- Specified by:
-
nextBytesв интерфейсеRandomGenerator - Overrides:
-
nextBytesв классеRandom - Parameters:
-
bytes- массив, который будет заполнен случайными байтами. - Throws:
-
NullPointerException- еслиbytesявляетсяnull
nextBytes
public void nextBytes(byte[] bytes, SecureRandomParameters params)
- Parameters:
-
bytes- массив, который будет заполнен случайными байтами -
params- дополнительные параметры - Throws:
-
NullPointerException- еслиbytesявляетсяnull -
UnsupportedOperationException- если реализация основного поставщика не переопределила этот метод -
IllegalArgumentException- еслиparamsявляетсяnull, недопустимым или неподдерживаемым этим объектомSecureRandom - Since:
- 9
next
protected final int next(int numBits)
java.util.Random и служит источником случайных бит для всех методов, унаследованных от этого класса (например, nextInt, nextLong и nextFloat).getSeed
public static byte[] getSeed(int numBytes)
Этот метод включён только для обратной совместимости. Пользователю рекомендуется использовать один из альтернативных getInstance методов для получения объекта SecureRandom, а затем вызвать метод generateSeed для получения байтов seed из этого объекта.
- Параметры:
-
numBytes- количество байтов seed для генерации. - Возвращает:
- байты seed.
- Исключения:
-
IllegalArgumentException- еслиnumBytesотрицательно - См. также:
generateSeed
public byte[] generateSeed(int numBytes)
- Параметры:
-
numBytes- количество байтов seed для генерации. - Возвращает:
- байты seed.
- Исключения:
-
IllegalArgumentException- еслиnumBytesотрицательно
getInstanceStrong
public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmException
SecureRandom, выбранный с использованием алгоритмов/провайдеров, указанных в свойстве
securerandom.strongAlgorithms Security. В некоторых ситуациях требуются сильные случайные значения, например, при создании высокозначимых/долгоживущих секретов, таких как ключи RSA public/private. Для помощи приложениям в выборе подходящей реализации сильного SecureRandom, дистрибутивы Java включают список известных реализаций сильных SecureRandom в свойстве securerandom.strongAlgorithms Security.
Каждая реализация платформы Java должна поддерживать как минимум одну реализацию сильного SecureRandom.
- Возвращает:
- реализация сильного
SecureRandom, указанная свойствомsecurerandom.strongAlgorithmsSecurity - Исключения:
-
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/security/SecureRandom.html