Класс KeyGenerator
public class KeyGenerator extends Object
Генераторы ключей создаются с помощью одного из методов класса getInstance.
Объекты KeyGenerator можно использовать повторно: после создания ключа тот же объект KeyGenerator можно использовать для генерации новых ключей.
Существует два способа сгенерировать ключ: независимо от алгоритма и с учетом конкретного алгоритма. Разница между ними заключается только в инициализации объекта:
-
Инициализация независимо от алгоритма
Для всех генераторов ключей важны такие понятия, как размер ключа и источник случайных данных. В этом классе
KeyGeneratorесть методinit, принимающий эти два универсальных типа аргументов. Также имеется метод, принимающий только аргументkeysizeи использующий реализациюSecureRandomпровайдера с наивысшим приоритетом среди установленных в качестве источника случайных данных (или источник случайных данных, предоставляемый системой, если ни один из установленных провайдеров не предоставляет реализацию SecureRandom), а также метод, принимающий только источник случайных данных.Поскольку при вызове описанных выше методов
init, не зависящих от алгоритма, другие параметры не указываются, провайдер сам определяет, что делать с параметрами, зависящими от алгоритма (если таковые имеются), которые будут связаны с каждым ключом. -
Инициализация с учетом конкретного алгоритма
Если набор параметров, зависящих от алгоритма, уже задан, доступны два метода
init, принимающих аргументAlgorithmParameterSpec. Один из них также принимает аргументSecureRandom, а другой использует реализацию SecureRandom провайдера с наивысшим приоритетом среди установленных в качестве источника случайных данных (или источник случайных данных, предоставляемый системой, если ни один из установленных провайдеров не предоставляет реализацию SecureRandom).
Если клиент явно не инициализирует KeyGenerator (вызвав метод init), каждый провайдер должен предоставить и задокументировать инициализацию по умолчанию. Сведения о значениях KeyGenerator по умолчанию, используемых провайдерами JDK, см. в разделах «Ограничения на размер ключа» документа Провайдеры JDK. Однако следует учитывать, что значения по умолчанию могут различаться у разных провайдеров. Кроме того, значение по умолчанию для провайдера может измениться в будущей версии. Поэтому рекомендуется явно инициализировать KeyGenerator, а не полагаться на значения по умолчанию конкретного провайдера.
Каждая реализация платформы Java должна поддерживать следующие стандартные алгоритмы KeyGenerator с указанными в скобках размерами ключей:
-
AES(128, 256) ChaCha20-
DESede(168) HmacSHA1HmacSHA256
- Начиная с:
- 1.4
- Внешние спецификации
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создает объект KeyGenerator. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final SecretKey |
generateKey() |
Генерирует секретный ключ. |
final String |
getAlgorithm() |
Возвращает имя алгоритма этого объекта KeyGenerator. |
static final KeyGenerator |
getInstance |
Возвращает объект KeyGenerator, генерирующий секретные ключи для указанного алгоритма. |
static final KeyGenerator |
getInstance |
Возвращает объект KeyGenerator, генерирующий секретные ключи для указанного алгоритма. |
static final KeyGenerator |
getInstance |
Возвращает объект KeyGenerator, генерирующий секретные ключи для указанного алгоритма. |
final Provider |
getProvider() |
Возвращает провайдер этого объекта KeyGenerator. |
final void |
init |
Инициализирует этот генератор ключей для указанного размера ключа. |
final void |
init |
Инициализирует этот генератор ключей для указанного размера ключа, используя предоставленный пользователем источник случайных данных. |
final void |
init |
Инициализирует этот генератор ключей. |
final void |
init |
Инициализирует этот генератор ключей указанным набором параметров. |
final void |
init |
Инициализирует этот генератор ключей указанным набором параметров и предоставленным пользователем источником случайных данных. |
Подробное описание конструкторов
KeyGenerator
protected KeyGenerator(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm)
KeyGenerator.- Параметры:
-
keyGenSpi— делегат -
provider— провайдер -
algorithm— алгоритм
Подробное описание методов
getAlgorithm
public final String getAlgorithm()
KeyGenerator. Это то же имя, которое было указано в одном из вызовов getInstance, создавших этот объект KeyGenerator.
- Возвращает:
- имя алгоритма этого объекта
KeyGenerator.
getInstance
public static final KeyGenerator getInstance(String algorithm) throws NoSuchAlgorithmException
KeyGenerator, генерирующий секретные ключи для указанного алгоритма. Этот метод перебирает список зарегистрированных провайдеров безопасности, начиная с провайдера с наивысшим приоритетом. Возвращается новый объект KeyGenerator, инкапсулирующий реализацию KeyGeneratorSpi первого провайдера, поддерживающего указанный алгоритм.
Список зарегистрированных провайдеров можно получить с помощью метода Security.getProviders().
- Примечание по реализации:
- Референсная реализация JDK также использует свойство
jdk.security.provider.preferredSecurityдля определения порядка предпочтения провайдеров для указанного алгоритма. Этот порядок может отличаться от порядка провайдеров, возвращаемых методомSecurity.getProviders(). - Параметры:
-
algorithm— стандартное имя запрашиваемого алгоритма ключа. Сведения о стандартных именах алгоритмов см. в разделе KeyGenerator спецификации стандартных имен алгоритмов безопасности Java. - Возвращает:
- новый объект
KeyGenerator - Исключения:
-
NoSuchAlgorithmException— если ни одинProviderне поддерживает реализациюKeyGeneratorSpiдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
- См. также:
getInstance
public static final KeyGenerator getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
KeyGenerator, генерирующий секретные ключи для указанного алгоритма. Возвращается новый объект KeyGenerator, инкапсулирующий реализацию KeyGeneratorSpi указанного провайдера. Указанный провайдер должен быть зарегистрирован в списке провайдеров безопасности.
Список зарегистрированных провайдеров можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm— стандартное имя запрашиваемого алгоритма ключа. Сведения о стандартных именах алгоритмов см. в разделе KeyGenerator спецификации стандартных имен алгоритмов безопасности Java. -
provider— имя провайдера. - Возвращает:
- новый объект
KeyGenerator - Исключения:
-
IllegalArgumentException— если значениеproviderравноnullили пусто -
NoSuchAlgorithmException— если указанный провайдер не предоставляет реализациюKeyGeneratorSpiдля указанного алгоритма -
NoSuchProviderException— если указанный провайдер не зарегистрирован в списке провайдеров безопасности -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
- См. также:
getInstance
public static final KeyGenerator getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
KeyGenerator, генерирующий секретные ключи для указанного алгоритма. Возвращается новый объект KeyGenerator, инкапсулирующий реализацию KeyGeneratorSpi указанного объекта провайдера. Обратите внимание, что указанный объект провайдера не обязательно должен быть зарегистрирован в списке провайдеров.
- Параметры:
-
algorithm— стандартное имя запрашиваемого алгоритма ключа. Сведения о стандартных именах алгоритмов см. в разделе KeyGenerator спецификации стандартных имен алгоритмов безопасности Java. -
provider— провайдер. - Возвращает:
- новый объект
KeyGenerator - Исключения:
-
IllegalArgumentException— если значениеproviderравноnull -
NoSuchAlgorithmException— если указанный объектProviderне предоставляет реализациюKeyGeneratorSpiдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
- См. также:
getProvider
public final Provider getProvider()
KeyGenerator.- Возвращает:
- провайдер этого объекта
KeyGenerator
init
public final void init(SecureRandom random)
- Параметры:
-
random— источник случайных данных для этого генератора
init
public final void init(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException
Если этому генератору ключей требуются случайные байты, он получит их с помощью реализации SecureRandom провайдера с наивысшим приоритетом среди установленных, используя ее в качестве источника случайных данных. (Если ни один из установленных провайдеров не предоставляет реализацию SecureRandom, будет использоваться источник случайных данных, предоставляемый системой.)
- Параметры:
-
params— параметры генерации ключа - Исключения:
-
InvalidAlgorithmParameterException— если указанные параметры не подходят для этого генератора ключей
init
public final void init(AlgorithmParameterSpec params, SecureRandom random) throws InvalidAlgorithmParameterException
- Параметры:
-
params— параметры генерации ключа -
random— источник случайных данных для этого генератора ключей - Исключения:
-
InvalidAlgorithmParameterException— еслиparamsне подходит для этого генератора ключей
init
public final void init(int keysize)
Если этому генератору ключей требуются случайные байты, он получит их с помощью реализации SecureRandom провайдера с наивысшим приоритетом среди установленных, используя ее в качестве источника случайных данных. (Если ни один из установленных провайдеров не предоставляет реализацию SecureRandom, будет использоваться источник случайных данных, предоставляемый системой.)
- Параметры:
-
keysize— размер ключа. Это метрика, зависящая от алгоритма и задаваемая в битах. - Исключения:
-
InvalidParameterException— если размер ключа указан неверно или не поддерживается.
init
public final void init(int keysize, SecureRandom random)
- Параметры:
-
keysize— размер ключа. Это метрика, зависящая от алгоритма и задаваемая в битах. -
random— источник случайных данных для этого генератора ключей - Исключения:
-
InvalidParameterException— если размер ключа указан неверно или не поддерживается.
generateKey
public final SecretKey generateKey()
- Возвращает:
- новый ключ
© 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/javax/crypto/KeyGenerator.html