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为空。 
            Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.