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