モジュール java.base
パッケージ javax.crypto

クラスSealedObject

  • すべての実装されたインタフェース:
    Serializable

    public class SealedObject
    extends Object
    implements Serializable
    プログラマは、このクラスを使用してオブジェクトを生成し、暗号化アルゴリズムを利用してその機密性を保護することができます。

    直列化可能なオブジェクトがあれば、SealedObjectを作成でき、元のオブジェクトをシリアライズされた形式(すなわち、"ディープ・コピー")でカプセル化し、AESなどの暗号化アルゴリズムを使用してシリアル化されたコンテンツをシールして機密性を保護することができます。 そのあと、暗号化された内容の暗号解読(適正な暗号解読鍵を使用)、および直列化解除を行うことにより、元のオブジェクトを復元できます。

    Cipherオブジェクトは、正しいアルゴリズム、鍵、パディング方式などで完全に初期化してからSealedObjectに適用する必要があります。

    シールされた元のオブジェクトは、次の異なる2つの方法で復元可能です。

    • CipherオブジェクトをとるgetObjectメソッドを使用する。

      このメソッドは、オブジェクトをシールするのに使用したのとまったく同じアルゴリズム、鍵、パディング方式などで完全に初期化されたCipherオブジェクトを必要とします。

      この方法には、暗号解読鍵に関する知識がなくても、シールされたオブジェクトのアンシールを実行できるという利点があります。 たとえば、あるパーティが暗号オブジェクトを必須の暗号解読鍵を使って初期化したあとで、別のパーティに渡すと、そのパーティはシールされたオブジェクトをアンシールできます。

    • KeyオブジェクトをとるgetObjectメソッドの1つを使用する。

      この方法では、getObjectメソッドは、適切な暗号解読アルゴリズム用の暗号オブジェクトを作成し、シール済みのオブジェクトに格納された特定の暗号解読鍵およびアルゴリズム・パラメータ(存在する場合)を使用してそれを初期化します。

      この方式には、オブジェクトをシール解除する当事者はオブジェクトをシールするのに使用されたパラメータ(たとえば、IV)を追跡する必要がないという利点があります。

    導入されたバージョン:
    1.4
    関連項目:
    Cipher, 直列化された形式
    • フィールドのサマリー

      フィールド 
      修飾子と型 フィールド 説明
      protected byte[] encodedParams
      シールする暗号によって使用される、デフォルトの形式でエンコードされた暗号化パラメータです。
    • コンストラクタのサマリー

      コンストラクタ 
      修飾子 コンストラクタ 説明
        SealedObject​(Serializable object, Cipher c)
      任意のSerializableオブジェクトからSealedObjectを構築します。
      protected SealedObject​(SealedObject so)
      渡されたSealedObjectオブジェクトからSealedObjectオブジェクトを構築します。
    • フィールドの詳細

      • encodedParams

        protected byte[] encodedParams
        シールする暗号によって使用される、デフォルトの形式でエンコードされた暗号化パラメータです。

        つまり、cipher.getParameters().getEncoded()です。

    • コンストラクタの詳細

      • 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の場合。
    • メソッドの詳細

      • getAlgorithm

        public final String getAlgorithm()
        このオブジェクトをシールするのに使用されたアルゴリズムを返します。
        戻り値:
        このオブジェクトをシールするのに使用されたアルゴリズム
      • getObject

        public final Object getObject​(Key key)
                               throws IOException,
                                      ClassNotFoundException,
                                      NoSuchAlgorithmException,
                                      InvalidKeyException
        元の(カプセル化された)オブジェクトを取り出します。

        このメソッドは、シール操作で使用されたアルゴリズムの暗号を作成します。 デフォルトのプロバイダ・パッケージがそのアルゴリズムを実装する場合は、その実装を含むCipherのインスタンスが使用されます。 指定されたアルゴリズムがデフォルトのパッケージで使用可能でない場合は、ほかのパッケージが検索されます。 Cipherオブジェクトは、指定されたkeyと、シール操作に使用されたパラメータ(もしあれば)を使用して、復号化用に初期化されます。

        カプセル化されたオブジェクトは、シールと直列化を解除してから返されます。

        パラメータ:
        key - オブジェクトをシール解除するのに使用する鍵。
        戻り値:
        元のオブジェクト
        例外:
        IOException - 直列化解除でエラーが発生した場合。
        ClassNotFoundException - 直列化解除でエラーが発生した場合。
        NoSuchAlgorithmException - オブジェクトをシール解除するアルゴリズムがない場合。
        InvalidKeyException - アルゴリズムが間違っている場合など、指定された鍵を使用してオブジェクトをシール解除できない場合。
        NullPointerException - keyがnullである場合。
      • getObject

        public final Object getObject​(Cipher c)
                               throws IOException,
                                      ClassNotFoundException,
                                      IllegalBlockSizeException,
                                      BadPaddingException
        元の(カプセル化された)オブジェクトを取り出します。

        カプセル化されたオブジェクトは、Cipherがすでに適切に初期化されていることを前提として、指定されたCipherを使用してシール解除され、直列化解除されてから返されます。

        パラメータ:
        c - オブジェクトをシール解除するのに使用される暗号
        戻り値:
        元のオブジェクト
        例外:
        NullPointerException - 指定された暗号がnullの場合。
        IOException - 直列化解除でエラーが発生した場合
        ClassNotFoundException - 直列化解除でエラーが発生した場合
        IllegalBlockSizeException - 指定された暗号がブロック暗号であり、パディングが要求されておらず、入力長の合計が暗号のブロック・サイズの倍数でない場合
        BadPaddingException - 指定された暗号が復号化用に初期化されており、パディングが指定されているが、入力データに適切な予期されるパディング・バイトがない場合
      • getObject

        public final Object getObject​(Key key,
                                      String provider)
                               throws IOException,
                                      ClassNotFoundException,
                                      NoSuchAlgorithmException,
                                      NoSuchProviderException,
                                      InvalidKeyException
        元の(カプセル化された)オブジェクトを取り出します。

        このメソッドは、シール操作に使用されたアルゴリズムの暗号を、指定されたproviderからそのアルゴリズムの実装を使用して作成します。 Cipherオブジェクトは、指定されたkeyと、シール操作に使用されたパラメータ(もしあれば)を使用して、復号化用に初期化されます。

        カプセル化されたオブジェクトは、シールと直列化を解除してから返されます。

        パラメータ:
        key - オブジェクトをシール解除するのに使用する鍵。
        provider - オブジェクトをシール解除するアルゴリズムのプロバイダ名。
        戻り値:
        元のオブジェクト
        例外:
        IllegalArgumentException - 指定されたプロバイダがnullか空の場合。
        IOException - 直列化解除でエラーが発生した場合。
        ClassNotFoundException - 直列化解除でエラーが発生した場合。
        NoSuchAlgorithmException - オブジェクトをシール解除するアルゴリズムがない場合。
        NoSuchProviderException - 指定されたプロバイダが設定されていない場合。
        InvalidKeyException - アルゴリズムが間違っている場合など、指定された鍵を使用してオブジェクトをシール解除できない場合。
        NullPointerException - keyがnullである場合。