Module java.base
Package javax.crypto

Class SealedObject

java.lang.Object
javax.crypto.SealedObject
所有已实现的接口:
Serializable

public class SealedObject extends Object implements Serializable
此类使程序员能够使用加密算法创建对象并保护其机密性。

给定任何Serializable对象,可以创建一个SealedObject,封装原始对象的序列化格式(即“深度复制”),并使用诸如AES之类的加密算法对其序列化内容进行封装(加密),以保护其机密性。加密内容可以稍后使用相应的算法(使用正确的解密密钥)进行解密并反序列化,从而得到原始对象。

请注意,在应用于SealedObject之前,Cipher对象必须完全使用正确的算法、密钥、填充方案等进行初始化。

被封装的原始对象可以通过两种不同的方式恢复:

  • 通过使用接受Cipher对象的getObject方法。

    此方法需要一个完全初始化的Cipher对象,该对象使用与封装对象相同的算法、密钥、填充方案等进行初始化。

    这种方法的优点是解封封装对象的一方不需要知道解密密钥。例如,在一方使用所需的解密密钥初始化了密码器对象后,可以将密码器对象交给另一方,然后另一方解封封装对象。

  • 通过使用接受Key对象的一个getObject方法。

    在这种方法中,getObject方法为适当的解密算法创建一个密码器对象,并使用存储在封装对象中的给定解密密钥和算法参数(如果有)对其进行初始化。

    这种方法的优点是解封对象的一方无需跟踪用于封装对象的参数(例如IV)。

自版本:
1.4
参见:
  • Field Details

    • encodedParams

      protected byte[] encodedParams
      封装Cipher对象使用的加密参数,以默认格式编码。

      即,Cipher.getParameters().getEncoded()

  • Constructor Details

    • SealedObject

      public SealedObject(Serializable object, Cipher c) throws IOException, IllegalBlockSizeException
      从任何Serializable对象构造一个SealedObject

      给定对象被序列化,其序列化内容使用给定的完全初始化的Cipher对象进行加密。

      在加密操作中可能使用的任何算法参数都存储在新的SealedObject中。

      参数:
      object - 要封装的对象;可以为null
      c - 用于封装对象的密码器。
      抛出:
      NullPointerException - 如果给定的密码器为null
      IOException - 如果在序列化过程中发生错误
      IllegalBlockSizeException - 如果给定的密码器是块密码器,未请求填充,并且总输入长度(即,序列化对象内容的长度)不是密码器块大小的倍数
    • SealedObject

      protected SealedObject(SealedObject so)
      从传入的SealedObject构造一个SealedObject对象。
      参数:
      so - 一个SealedObject对象
      抛出:
      NullPointerException - 如果给定的封装对象为null
  • Method Details