Класс KEM
public final class KEM extends Object
Метод getInstance создает новый объект KEM, реализующий указанный алгоритм.
Объект KEM неизменяем. Можно безопасно одновременно вызывать несколько методов newEncapsulator и newDecapsulator для одного и того же объекта KEM.
Если при создании объекта KEM в методе getInstance не указан поставщик, методы newEncapsulator и newDecapsulator могут возвращать инкапсуляторы или декапсуляторы от разных поставщиков. Выбранный поставщик зависит от параметров, переданных методам newEncapsulator или newDecapsulator: закрытого или открытого ключа и необязательного параметра AlgorithmParameterSpec. Методы KEM.Encapsulator.providerName() и KEM.Decapsulator.providerName() возвращают имя выбранного поставщика.
Объекты Encapsulator и Decapsulator также неизменяемы. Можно безопасно одновременно вызывать несколько методов encapsulate и decapsulate для одного и того же объекта Encapsulator или Decapsulator. Каждый вызов encapsulate генерирует новый общий секрет и сообщение инкапсуляции ключа.
Пример операции с использованием фиктивного алгоритма KEM ABC:
// Receiver side
KeyPairGenerator g = KeyPairGenerator.getInstance("ABC");
KeyPair kp = g.generateKeyPair();
publishKey(kp.getPublic());
// Sender side
KEM senderKEM = KEM.getInstance("ABC");
PublicKey receiverPublicKey = retrieveKey();
ABCKEMParameterSpec senderSpec = new ABCKEMParameterSpec(args);
KEM.Encapsulator e = senderKEM.newEncapsulator(
receiverPublicKey, senderSpec, null);
KEM.Encapsulated enc = e.encapsulate();
SecretKey senderSecret = enc.key();
sendBytes(enc.encapsulation());
sendBytes(enc.params());
// Receiver side
byte[] ciphertext = receiveBytes();
byte[] params = receiveBytes();
KEM receiverKEM = KEM.getInstance("ABC");
AlgorithmParameters algParams =
AlgorithmParameters.getInstance("ABC");
algParams.init(params);
ABCKEMParameterSpec receiverSpec =
algParams.getParameterSpec(ABCKEMParameterSpec.class);
KEM.Decapsulator d =
receiverKEM.newDecapsulator(kp.getPrivate(), receiverSpec);
SecretKey receiverSecret = d.decapsulate(ciphertext);
// senderSecret and receiverSecret should now be equal.
- Начиная с версии:
- 21
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static final class |
KEM.Decapsulator |
Декапсулятор, созданный методом newDecapsulator(PrivateKey) на стороне получателя KEM. |
static final class |
KEM.Encapsulated |
Этот класс задает возвращаемое значение метода инкапсуляции механизма инкапсуляции ключей (KEM), которое включает общий секрет (в виде SecretKey), сообщение инкапсуляции ключа и необязательные параметры. |
static final class |
KEM.Encapsulator |
Инкапсулятор, созданный методом newEncapsulator(PublicKey) на стороне отправителя KEM. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
getAlgorithm() |
Возвращает имя алгоритма для этого объекта KEM. |
static KEM |
getInstance |
Возвращает объект KEM, реализующий указанный алгоритм. |
static KEM |
getInstance |
Возвращает объект KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности. |
static KEM |
getInstance |
Возвращает объект KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности. |
KEM.Decapsulator |
newDecapsulator |
Создает декапсулятор KEM на стороне получателя KEM. |
KEM.Decapsulator |
newDecapsulator |
Создает декапсулятор KEM на стороне получателя KEM. |
KEM.Encapsulator |
newEncapsulator |
Создает инкапсулятор KEM на стороне отправителя KEM. |
KEM.Encapsulator |
newEncapsulator |
Создает инкапсулятор KEM на стороне отправителя KEM. |
KEM.Encapsulator |
newEncapsulator |
Создает инкапсулятор KEM на стороне отправителя KEM. |
Подробное описание методов
getInstance
public static KEM getInstance(String algorithm) throws NoSuchAlgorithmException
KEM, реализующий указанный алгоритм.- Параметры:
-
algorithm— имя алгоритма KEM. Сведения о стандартных именах алгоритмов KEM см. в разделеKEMдокументации Спецификация стандартных имен алгоритмов Java Security. - Возвращает:
- новый объект
KEM - Исключения:
-
NoSuchAlgorithmException— если ни одинProviderне поддерживает реализациюKEMдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
getInstance
public static KEM getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности.- Параметры:
-
algorithm— имя алгоритма KEM. Сведения о стандартных именах алгоритмов KEM см. в разделеKEMдокументации Спецификация стандартных имен алгоритмов Java Security. -
provider— поставщик. Еслиnull, этот метод эквивалентен методуgetInstance(String). - Возвращает:
- новый объект
KEM - Исключения:
-
NoSuchAlgorithmException— если указанproviderи он не поддерживает указанный алгоритм KEM либо еслиproviderимеет значениеnullи нет поставщика, поддерживающего реализацию KEM указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
getInstance
public static KEM getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
KEM, реализующий указанный алгоритм от указанного поставщика средств безопасности.- Параметры:
-
algorithm— имя алгоритма KEM. Сведения о стандартных именах алгоритмов KEM см. в разделеKEMдокументации Спецификация стандартных имен алгоритмов Java Security. -
provider— поставщик. Еслиnull, этот метод эквивалентен методуgetInstance(String). - Возвращает:
- новый объект
KEM - Исключения:
-
NoSuchAlgorithmException— если указанproviderи он не поддерживает указанный алгоритм KEM либо еслиproviderимеет значениеnullи нет поставщика, поддерживающего реализацию KEM указанного алгоритма -
NoSuchProviderException— если указанный поставщик не зарегистрирован в списке поставщиков средств безопасности -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
newEncapsulator
public KEM.Encapsulator newEncapsulator(PublicKey publicKey) throws InvalidKeyException
Этот метод эквивалентен newEncapsulator(publicKey, null, null).
- Параметры:
-
publicKey— открытый ключ получателя; не должен иметь значениеnull - Возвращает:
- инкапсулятор для этого ключа
- Исключения:
-
InvalidKeyException— еслиpublicKeyимеет значениеnullили недопустим -
UnsupportedOperationException— если этот метод не поддерживается, поскольку необходимо предоставитьAlgorithmParameterSpec
newEncapsulator
public KEM.Encapsulator newEncapsulator(PublicKey publicKey, SecureRandom secureRandom) throws InvalidKeyException
Этот метод эквивалентен newEncapsulator(publicKey, null, secureRandom).
- Параметры:
-
publicKey— открытый ключ получателя; не должен иметь значениеnull -
secureRandom— источник случайных данных для инкапсуляции. Если значение равно null, будет использоваться источник по умолчанию из реализации. - Возвращает:
- инкапсулятор для этого ключа
- Исключения:
-
InvalidKeyException— еслиpublicKeyимеет значениеnullили недопустим -
UnsupportedOperationException— если этот метод не поддерживается, поскольку необходимо предоставитьAlgorithmParameterSpec
newEncapsulator
public KEM.Encapsulator newEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException
Алгоритм может определить дочерний класс AlgorithmParameterSpec, чтобы предоставить дополнительные сведения в этом методе. Это особенно полезно, если один и тот же ключ можно использовать для получения общих секретов разными способами. Если какие-либо дополнительные сведения из этого объекта необходимо передать вместе с сообщением инкапсуляции ключа, чтобы получатель мог создать соответствующий декапсулятор, они будут включены в виде массива байтов, возвращаемого методом KEM.Encapsulated.params() в выходных данных инкапсуляции. В этом случае поставщик средств безопасности должен предоставить реализацию AlgorithmParameters с тем же именем алгоритма, что и у KEM. Получатель может создать такой экземпляр AlgorithmParameters с полученным массивом байтов params и восстановить объект AlgorithmParameterSpec для использования при вызове метода newDecapsulator(PrivateKey, AlgorithmParameterSpec).
- Параметры:
-
publicKey— открытый ключ получателя; не должен иметь значениеnull -
spec— необязательный параметр; может иметь значениеnull -
secureRandom— источник случайных данных для инкапсуляции. Если значение равно null, будет использоваться источник по умолчанию из реализации. - Возвращает:
- инкапсулятор для этого ключа
- Исключения:
-
InvalidAlgorithmParameterException— еслиspecнедопустим или если параметр необходим, ноspecимеет значениеnull -
InvalidKeyException— еслиpublicKeyимеет значениеnullили недопустим
newDecapsulator
public KEM.Decapsulator newDecapsulator(PrivateKey privateKey) throws InvalidKeyException
Этот метод эквивалентен newDecapsulator(privateKey, null).
- Параметры:
-
privateKey— закрытый ключ получателя; не должен иметь значениеnull - Возвращает:
- декапсулятор для этого ключа
- Исключения:
-
InvalidKeyException— еслиprivateKeyимеет значениеnullили недопустим -
UnsupportedOperationException— если этот метод не поддерживается, поскольку необходимо предоставитьAlgorithmParameterSpec
newDecapsulator
public KEM.Decapsulator newDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException, InvalidKeyException
- Параметры:
-
privateKey— закрытый ключ получателя; не должен иметь значениеnull -
spec— параметр; может иметь значениеnull - Возвращает:
- декапсулятор для этого ключа
- Исключения:
-
InvalidAlgorithmParameterException— еслиspecнедопустим или если параметр необходим, ноspecимеет значениеnull -
InvalidKeyException— еслиprivateKeyимеет значениеnullили недопустим
getAlgorithm
public String getAlgorithm()
KEM.- Возвращает:
- имя алгоритма для этого объекта
KEM.
© 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/KEM.html