java.lang.Object javax.crypto.SealedObject
public class SealedObject
此类使程序员能够用加密算法创建对象并保护其机密性。
在给定任何 Serializable 对象的情况下,程序员可以序列化格式(即“深层复制”)封装原始对象的 SealedObject,并使用 DES 一类的加密算法密封(加密)其序列化的内容,以保护其机密性。加密的内容以后可以解密(使用相应的算法和正确的解密密钥)和反序列化,并生成原始对象。
注意,该 Cipher 对象在应用于 SealedObject 之前必须使用正确的算法、密钥、填充方案等进行完全初始化。
已密封的原始对象可以用以下两种不同的方式恢复:
Cipher
对象的 getObject
方法。 此方法需要一个完全初始化的 Cipher
对象,用极其相同、用来密封对象的算法、密钥、填充方案等进行初始化。
这样做的好处是解封密封对象的一方不需要知道解密密钥。例如,一方用所需的解密密钥初始化 cipher 对象之后,它就会将 cipher 对象移交给以后要解封密封对象的另一方。
Key
对象的 getObject
方法。 在此方法中,getObject
方法创建一个用于适当解密算法的 cipher 对象,并用给定的解密密钥和存储在密封对象中的算法参数(如果有)对其进行初始化。
这样做的好处是解封此对象的一方不需要跟踪用来密封该对象的参数(如 IV)。
字段摘要 | |
---|---|
protected byte[] |
encodedParams 由密封 Cipher 使用的加密参数,以默认格式进行编码。 |
构造方法摘要 | |
---|---|
protected |
SealedObject(SealedObject so) 根据传入的 SealedObject 构造一个 SealedObject 对象。 |
|
SealedObject(Serializable object, Cipher c) 从任何 Serializable 对象构造一个 SealedObject。 |
方法摘要 | |
---|---|
String |
getAlgorithm() 返回用于密封此对象的算法。 |
Object |
getObject(Cipher c) 获取原始(封装的)对象。 |
Object |
getObject(Key key) 获取原始(封装的)对象。 |
Object |
getObject(Key key, String provider) 获取原始(封装的)对象。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
protected byte[] encodedParams
即 cipher.getParameters().getEncoded()
。
构造方法详细信息 |
---|
public SealedObject(Serializable object, Cipher c) throws IOException, IllegalBlockSizeException
序列化给定的对象,并使用给定的 Cipher 加密其序列化的内容,其必须完全序列化。
在加密操作中可能使用到的所有算法参数都存储在新的 SealedObject
内。
object
- 要密封的对象;可以为 null。
c
- 用于密封对象的密码。
NullPointerException
- 如果给定的密码为 null。
IOException
- 如果在序列化过程中发生错误
IllegalBlockSizeException
- 如果给定的密码是块密码、或者该块密码不需要填充,或者总输入长度(即序列化对象内容的长度)不是该密码的块大小的倍数
protected SealedObject(SealedObject so)
so
- SealedObject 对象
NullPointerException
- 如果给定的密封对象为 null。
方法详细信息 |
---|
public final String getAlgorithm()
public final Object getObject(Key key) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, InvalidKeyException
此方法为密封操作中已使用的算法创建一个密码。如果默认提供者包提供该算法的一个实现,则使用一个包含该实现的 Cipher 实例。如果在默认的包中未提供该算法,则将搜索其他的包。使用给定的 key
和密封操作中已使用的参数(如果有)初始化用于解密的 Cipher 对象。
在返回已封装的对象之前将其解封和反序列化。
key
- 用于解封对象的密钥。
IOException
- 如果在反序列化过程中发生错误。
ClassNotFoundException
- 如果在反序列化过程中发生错误。
NoSuchAlgorithmException
- 如果解封对象的算法不可用。
InvalidKeyException
- 如果无法使用给定密钥解封对象(例如其算法错误)。
NullPointerException
- 如果
key
为 null。
public final Object getObject(Cipher c) throws IOException, ClassNotFoundException, IllegalBlockSizeException, BadPaddingException
在返回已封装的对象之前将其解封(使用给定的 Cipher,假定该 Cipher 已正确初始化)和反序列化。
c
- 用于解封该对象的密码
NullPointerException
- 如果给定的密码为 null。
IOException
- 如果反序列化过程中发生错误
ClassNotFoundException
- 如果在反序列化过程中发生错误
IllegalBlockSizeException
- 如果给定密码是块密码、或者不需要填充该块密码,或者总输入长度不是该密码块大小的倍数
BadPaddingException
- 如果已初始化用于解密的给定密码,并且指定了填充,但输入数据没有适当的所需填充字节
public final Object getObject(Key key, String provider) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException
此方法使用给定 provider
中的算法的实现,为密封操作中已使用的此算法创建一个密码。使用给定的 key
和密封操作中已使用的参数(如果有)初始化用于解密的 Cipher 对象。
返回已封装的对象之前将其解封和反序列化。
key
- 用于解封对象的密钥。
provider
- 要解封对象的算法的提供者名称。
IllegalArgumentException
- 如果给定提供者为 null 或空。
IOException
- 如果在反序列化过程中发生错误。
ClassNotFoundException
- 如果在反序列化过程中发生错误。
NoSuchAlgorithmException
- 如果解封对象的算法不可用。
NoSuchProviderException
- 如果未配置给定提供者。
InvalidKeyException
- 如果无法使用给定密钥解封对象(例如其算法错误)。
NullPointerException
- 如果
key
为 null。