public class SealedObject extends Object implements Serializable
给定任何可序列化对象,可以创建一个SealedObject,以序列化格式(即“深度拷贝”)封装原始对象,并使用DES等加密算法对其序列化内容进行封装(加密),以保护其机密性。 加密的内容可以随后被解密(使用相应的算法使用正确的解密密钥)并解串行化,产生原始对象。
请注意,在应用于SealedObject之前,必须使用正确的算法,密钥,填充方案等将密码对象完全初始化。
密封的原始物体可以通过两种不同的方法进行回收:
Cipher
对象的getObject
方法。 该方法需要完全初始化Cipher
对象,用与Cipher
对象相同的算法,密钥,填充方案等进行初始化。
这种方法的优点在于,开封密封对象的一方不需要知道解密密钥。 例如,在一方已经用所需的解密密钥初始化密码对象之后,它可以将密码对象交给另一方,然后该密码对象就开封密封对象。
Key
对象的getObject
方法之一。 在这种方法中, getObject
方法为getObject
算法创建一个密码对象,并使用给定的解密密钥和存储在密封对象中的算法参数(如果有的话)进行初始化。
这种方法的优点在于,开封对象的方不需要跟踪用于密封对象的参数(例如,IV)。
Cipher
, Serialized Form
Modifier and Type | Field and Description |
---|---|
protected byte[] |
encodedParams
密码密码使用的密码参数,以默认格式编码。
|
Modifier | Constructor and Description |
---|---|
protected |
SealedObject(SealedObject so)
从传入的SealedObject构造一个SealedObject对象。
|
|
SealedObject(Serializable object, Cipher c)
从任何可序列化对象构造一个SealedObject。
|
protected byte[] encodedParams
也就是cipher.getParameters().getEncoded()
。
public SealedObject(Serializable object, Cipher c) throws IOException, IllegalBlockSizeException
给定的对象被序列化,并且其序列化内容使用给定的密码进行加密,该密码必须被完全初始化。
可能在加密操作中使用的任何算法参数都存储在新的SealedObject
。
object
- 要密封的物体;
可以为空。
c
- 用于密封对象的密码。
NullPointerException
- 如果给定的密码为空。
IOException
- 如果在序列化期间发生错误
IllegalBlockSizeException
- 如果给定的密码是块密码,则不会请求填充,并且总输入长度(即,序列化对象内容的长度)不是密码块大小的倍数
protected SealedObject(SealedObject so)
so
- 一个SealedObject对象
NullPointerException
- 如果给定的密封对象为空。
public final String getAlgorithm()
public final Object getObject(Key key) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, InvalidKeyException
该方法为密封操作中使用的算法创建一个密码。 如果默认提供程序包提供了该算法的实现,则使用包含该实现的Cipher的实例。 如果算法在默认包中不可用,则会搜索其他包。 使用给定的key
和密封操作中使用的参数(如果有),将密码对象初始化以进行解密。
封装的对象在被返回之前是未密封的并被解除序列化的。
key
- 用于开封对象的键。
IOException
- 如果在排序期间发生错误。
ClassNotFoundException
- 如果在排序期间发生错误。
NoSuchAlgorithmException
- 如果解封对象的算法不可用。
InvalidKeyException
- 如果给定的键不能用于解封对象(例如,它有错误的算法)。
NullPointerException
- 如果
key
为空。
public final Object getObject(Cipher c) throws IOException, ClassNotFoundException, IllegalBlockSizeException, BadPaddingException
封装的对象是未密封的(使用给定的Cipher,假设密码已被正确初始化)并被取消序列化,然后返回。
c
- 用于解密对象的密码
NullPointerException
- 如果给定的密码为空。
IOException
- 如果在排序期间发生错误
ClassNotFoundException
- 如果在排序期间发生错误
IllegalBlockSizeException
- 如果给定的密码是块密码,则不会请求填充,总输入长度不是密码块大小的倍数
BadPaddingException
- 如果给定的密码已被初始化用于解密,并且已经指定了填充,但是输入数据没有适当的预期填充字节
public final Object getObject(Key key, String provider) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException
该方法为密封操作中使用的算法创建一个密码,使用从给定的provider中的该算法的provider
。 使用给定的key
和密封操作中使用的参数(如果有),将密码对象初始化以进行解密。
封装的对象在被返回之前是未密封的并被解除序列化的。
key
- 用于打开对象的密钥。
provider
- 打开对象的算法提供者的名称。
IllegalArgumentException
- 如果给定的提供者为空或为空。
IOException
- 如果在排序期间发生错误。
ClassNotFoundException
- 如果在排序期间发生错误。
NoSuchAlgorithmException
- 如果解封对象的算法不可用。
NoSuchProviderException
- 如果给定的提供程序未配置。
InvalidKeyException
- 如果给定的键不能用于解封对象(例如,它有错误的算法)。
NullPointerException
- 如果
key
为空。