- すべての実装されたインタフェース:
Serializable
直列化可能なオブジェクトがあれば、SealedObjectを作成でき、元のオブジェクトを直列化された形式(すなわち、"ディープ・コピー")でカプセル化し、AESなどの暗号化アルゴリズムを使用してシリアル化されたコンテンツをシールして機密性を保護することができます。 そのあと、暗号化された内容の暗号解読(適正な暗号解読キーを使用)、および直列化解除を行うことにより、元のオブジェクトを復元できます。
Cipherオブジェクトは、正しいアルゴリズム、キー、パディング方式などで完全に初期化してからSealedObjectに適用する必要があります。
シールされた元のオブジェクトは、次の異なる2つの方法で復元可能です。
Cipher
オブジェクトをとるgetObject
メソッドを使用する。このメソッドは、オブジェクトをシールするのに使用したのとまったく同じアルゴリズム、キー、パディング方式などで完全に初期化された
Cipher
オブジェクトを必要とします。この方法には、復号化キーに関する知識がなくても、シールされたオブジェクトのアンシールを実行できるという利点があります。 たとえば、あるパーティが暗号オブジェクトを必須の復号化キーを使って初期化したあとで、別のパーティに渡すと、そのパーティはシールされたオブジェクトをアンシールできます。
Key
オブジェクトをとるgetObject
メソッドの1つを使用する。この方法では、
getObject
メソッドは、適切な復号化アルゴリズム用の暗号オブジェクトを作成し、シール済みのオブジェクトに格納された特定の復号化キーおよびアルゴリズム・パラメータ(存在する場合)を使用してそれを初期化します。この方式には、オブジェクトをシール解除する当事者はオブジェクトをシールするのに使用されたパラメータ(たとえば、IV)を追跡する必要がないという利点があります。
-
フィールドのサマリー
-
コンストラクタのサマリー
修飾子コンストラクタ説明SealedObject
(Serializable object, Cipher c) 任意のSerializableオブジェクトからSealedObjectを構築します。protected
渡された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である場合。
-