Класс SealedObject
- Все реализуемые интерфейсы:
Serializable
public class SealedObject extends Object implements Serializable
Для любого объекта Serializable можно создать SealedObject, который инкапсулирует исходный объект в сериализованном формате (то есть создает «глубокую копию») и запечатывает (шифрует) его сериализованное содержимое с помощью криптографического алгоритма, например AES, чтобы защитить его конфиденциальность. Впоследствии зашифрованное содержимое можно расшифровать (с помощью соответствующего алгоритма и правильного ключа расшифрования) и десериализовать, получив исходный объект.
Обратите внимание, что объект Cipher должен быть полностью инициализирован с правильным алгоритмом, ключом, схемой заполнения и т. д. до его применения к объекту SealedObject.
Исходный запечатанный объект можно восстановить двумя способами:
- с помощью метода
getObject, принимающего объектCipher.Для этого метода требуется полностью инициализированный объект
Cipher, инициализированный с теми же алгоритмом, ключом, схемой заполнения и т. д., которые использовались для запечатывания объекта.Преимущество этого подхода состоит в том, что стороне, распечатывающей запечатанный объект, не нужно знать ключ расшифрования. Например, после того как одна сторона инициализирует объект шифра необходимым ключом расшифрования, она может передать этот объект шифра другой стороне, которая затем распечатает запечатанный объект.
- с помощью одного из методов
getObject, принимающих объектKey.В этом случае метод
getObjectсоздает объект шифра для соответствующего алгоритма расшифрования и инициализирует его переданным ключом расшифрования и параметрами алгоритма (если они есть), сохраненными в запечатанном объекте.Преимущество этого подхода состоит в том, что стороне, распечатывающей объект, не нужно отслеживать параметры (например, вектор инициализации), использовавшиеся для запечатывания объекта.
- Начиная с версии:
- 1.4
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected byte[] |
encodedParams |
Криптографические параметры, используемые объектом шифра Cipher, закодированные в формате по умолчанию. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создает SealedObject из объекта любого типа Serializable. |
||
protected |
Создает объект SealedObject из переданного объекта SealedObject. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final String |
getAlgorithm() |
Возвращает алгоритм, использованный для запечатывания этого объекта. |
final Object |
getObject |
Получает исходный (инкапсулированный) объект. |
final Object |
getObject |
Получает исходный (инкапсулированный) объект. |
final Object |
getObject |
Получает исходный (инкапсулированный) объект. |
Подробное описание полей
encodedParams
protected byte[] encodedParams
Cipher, закодированные в формате по умолчанию. То есть Cipher.getParameters().getEncoded().
Подробное описание конструкторов
SealedObject
public SealedObject(Serializable object, Cipher c) throws IOException, IllegalBlockSizeException
SealedObject из объекта любого типа Serializable. Переданный объект сериализуется, а его сериализованное содержимое шифруется с помощью переданного объекта Cipher, который должен быть полностью инициализирован.
Все параметры алгоритма, которые могут использоваться при шифровании, сохраняются в новом объекте SealedObject.
- Параметры:
-
object— объект, который нужно запечатать; может бытьnull. -
c— шифр, используемый для запечатывания объекта. - Исключения:
-
NullPointerException— если переданный шифр являетсяnull. -
IOException— если при сериализации возникает ошибка -
IllegalBlockSizeException— если переданный шифр является блочным шифром, заполнение не запрошено, а общая длина входных данных (то есть длина сериализованного содержимого объекта) не кратна размеру блока шифра
SealedObject
protected SealedObject(SealedObject so)
SealedObject из переданного объекта SealedObject.- Параметры:
-
so— объектSealedObject - Исключения:
-
NullPointerException— если переданный запечатанный объект являетсяnull.
Подробное описание методов
getAlgorithm
public final String getAlgorithm()
- Возвращает:
- алгоритм, использованный для запечатывания этого объекта.
getObject
public final Object getObject(Key key) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, InvalidKeyException
Этот метод создает шифр для алгоритма, использованного при запечатывании. Если пакет поставщика по умолчанию предоставляет реализацию этого алгоритма, используется объект Cipher, содержащий эту реализацию. Если алгоритм недоступен в пакете по умолчанию, выполняется поиск в других пакетах. Объект Cipher инициализируется для расшифрования с использованием переданного key и параметров (если они есть), использовавшихся при запечатывании.
Инкапсулированный объект распечатывается и десериализуется перед возвратом.
- Параметры:
-
key— ключ, используемый для распечатывания объекта. - Возвращает:
- исходный объект.
- Исключения:
-
IOException— если при десериализации возникает ошибка. -
ClassNotFoundException— если при десериализации возникает ошибка. -
NoSuchAlgorithmException— если алгоритм для распечатывания объекта недоступен. -
InvalidKeyException— если переданный ключ нельзя использовать для распечатывания объекта (например, у него неверный алгоритм). -
NullPointerException— еслиkeyимеет значение null.
getObject
public final Object getObject(Cipher c) throws IOException, ClassNotFoundException, IllegalBlockSizeException, BadPaddingException
Инкапсулированный объект распечатывается (с помощью переданного объекта Cipher при условии, что объект Cipher уже правильно инициализирован) и десериализуется перед возвратом.
- Параметры:
-
c— шифр, используемый для распечатывания объекта - Возвращает:
- исходный объект.
- Исключения:
-
NullPointerException— если переданный шифр являетсяnull. -
IOException— если при десериализации возникает ошибка -
ClassNotFoundException— если при десериализации возникает ошибка -
IllegalBlockSizeException— если переданный шифр является блочным шифром, заполнение не запрошено, а общая длина входных данных не кратна размеру блока шифра -
BadPaddingException— если переданный шифр был инициализирован для расшифрования и указано заполнение, но входные данные не содержат ожидаемых байтов заполнения
getObject
public final Object getObject(Key key, String provider) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException
Этот метод создает шифр для алгоритма, использованного при запечатывании, используя реализацию этого алгоритма из переданного provider. Объект Cipher инициализируется для расшифрования с использованием переданного key и параметров (если они есть), использовавшихся при запечатывании.
Инкапсулированный объект распечатывается и десериализуется перед возвратом.
- Параметры:
-
key— ключ, используемый для распечатывания объекта. -
provider— имя поставщика алгоритма для распечатывания объекта. - Возвращает:
- исходный объект.
- Исключения:
-
IllegalArgumentException— если переданный поставщик являетсяnullили пуст. -
IOException— если при десериализации возникает ошибка. -
ClassNotFoundException— если при десериализации возникает ошибка. -
NoSuchAlgorithmException— если алгоритм для распечатывания объекта недоступен. -
NoSuchProviderException— если переданный поставщик не настроен. -
InvalidKeyException— если переданный ключ нельзя использовать для распечатывания объекта (например, у него неверный алгоритм). -
NullPointerException— еслиkeyимеет значение null.
© 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/SealedObject.html