模块  java.base
软件包  javax.crypto

Class SealedObject

  • 实现的所有接口
    Serializable

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

    给定任何Serializable对象,可以使用序列化格式(即“深拷贝”)创建封装原始对象的SealedObject,并使用AES等加密算法密封(加密)其序列化内容,以保护其机密性。 稍后可以解密加密的内容(使用相应的算法使用正确的解密密钥)并反序列化,从而产生原始对象。

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

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

    • 使用getObject方法获取Cipher对象。

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

      该方法的优点在于,开封密封对象的一方不需要知道解密密钥。 例如,在一方用所需的解密密钥初始化密码对象之后,它可以将密码对象移交给另一方,然后另一方解封密封的对象。

    • 通过使用采用Key对象的getObject方法之一。

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

      该方法的优点在于,开启对象的一方不需要跟踪用于密封对象的参数(例如,IV)。

    从以下版本开始:
    1.4
    另请参见:
    CipherSerialized Form
    • 字段详细信息

      • encodedParams

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

        也就是cipher.getParameters().getEncoded()

    • 构造方法详细信息

      • SealedObject

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

        给定对象是序列化的,其序列化内容使用给定的密码加密,必须完全初始化。

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

        参数
        object - 要密封的物体; 可以为null。
        c - 用于密封物体的密码。
        异常
        NullPointerException - 如果给定的密码为空。
        IOException - 如果序列化期间发生错误
        IllegalBlockSizeException - 如果给定的密码是块密码,则没有请求填充,并且总输入长度(即,序列化对象内容的长度)不是密码块大小的倍数
      • SealedObject

        protected SealedObject​(SealedObject so)
        从传入的SealedObject构造一个SealedObject对象。
        参数
        so - SealedObject对象
        异常
        NullPointerException - 如果给定的密封对象为空。