java.lang.Object
javax.crypto.SealedObject
- 所有已实现的接口:
-
Serializable
此类使程序员能够使用加密算法创建对象并保护其机密性。
给定任何Serializable
对象,可以创建一个SealedObject
,封装原始对象的序列化格式(即“深度复制”),并使用诸如AES之类的加密算法对其序列化内容进行封装(加密),以保护其机密性。加密内容可以稍后使用相应的算法(使用正确的解密密钥)进行解密并反序列化,从而得到原始对象。
请注意,在应用于SealedObject
之前,Cipher
对象必须完全使用正确的算法、密钥、填充方案等进行初始化。
被封装的原始对象可以通过两种不同的方式恢复:
- 自版本:
- 1.4
- 参见:
-
Field Summary
-
Constructor Summary
ModifierConstructorDescriptionSealedObject
(Serializable object, Cipher c) 从任何Serializable
对象构造一个SealedObject
。protected
从传入的SealedObject
构造一个SealedObject
对象。 -
Method Summary
-
Field Details
-
encodedParams
protected byte[] encodedParams封装Cipher
对象使用的加密参数,以默认格式编码。即,
Cipher.getParameters().getEncoded()
。
-
-
Constructor Details
-
SealedObject
从任何Serializable
对象构造一个SealedObject
。给定对象被序列化,其序列化内容使用给定的完全初始化的
Cipher
对象进行加密。在加密操作中可能使用的任何算法参数都存储在新的
SealedObject
中。- 参数:
-
object
- 要封装的对象;可以为null
。 -
c
- 用于封装对象的密码器。 - 抛出:
-
NullPointerException
- 如果给定的密码器为null
。 -
IOException
- 如果在序列化过程中发生错误 -
IllegalBlockSizeException
- 如果给定的密码器是块密码器,未请求填充,并且总输入长度(即,序列化对象内容的长度)不是密码器块大小的倍数
-
SealedObject
从传入的SealedObject
构造一个SealedObject
对象。- 参数:
-
so
- 一个SealedObject
对象 - 抛出:
-
NullPointerException
- 如果给定的封装对象为null
。
-
-
Method Details
-
getAlgorithm
返回用于封装此对象的算法。- 返回:
- 用于封装此对象的算法。
-
getObject
public final Object getObject(Key key) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, InvalidKeyException 检索原始(封装的)对象。此方法为封装操作中使用的算法创建一个密码器。如果默认提供程序包提供了该算法的实现,则使用包含该实现的
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
中的该算法的实现。密码器对象被初始化为解密,使用给定的key
和封装操作中使用的参数(如果有)。在返回之前,封装对象被解封并反序列化。
- 参数:
-
key
- 用于解封对象的密钥。 -
provider
- 用于解封对象的算法提供程序的名称。 - 返回:
- 原始对象。
- 抛出:
-
IllegalArgumentException
- 如果给定的提供程序为null
或为空。 -
IOException
- 如果在反序列化过程中发生错误。 -
ClassNotFoundException
- 如果在反序列化过程中发生错误。 -
NoSuchAlgorithmException
- 如果用于解封对象的算法不可用。 -
NoSuchProviderException
- 如果给定的提供程序未配置。 -
InvalidKeyException
- 如果给定的密钥无法用于解封对象(例如,它具有错误的算法)。 -
NullPointerException
- 如果key
为null。
-