public class SealedObject extends Object implements Serializable
Serializableオブジェクトを指定すると、元のオブジェクトを直列化形式(つまり「ディープ・コピー」)でカプセル化して、直列化されたコンテンツをシール(暗号化)し、DESなどの暗号化アルゴリズムを使用してその機密を保護するSealedObjectを作成できます。その後、暗号化された内容の復号化(適正な復号化鍵を使用)、および直列化解除を行うことにより、元のオブジェクトを復元できます。
Cipherオブジェクトは、正しいアルゴリズム、鍵、パディング方式などで完全に初期化してからSealedObjectに適用する必要があります。
シールされた元のオブジェクトは、次の異なる2つの方法で復元可能です。
Cipher
オブジェクトをとるgetObject
メソッドを使用する。
このメソッドは、オブジェクトをシールするのに使用したのとまったく同じアルゴリズム、鍵、パディング方式などで完全に初期化されたCipher
オブジェクトを必要とします。
この方法には、復号化鍵に関する知識がなくても、シールされたオブジェクトのアンシールを実行できるという利点があります。たとえば、あるパーティが暗号オブジェクトを必須の復号化鍵を使って初期化したあとで、別のパーティに渡すと、そのパーティはシールされたオブジェクトをアンシールできます。
Key
オブジェクトをとるgetObject
メソッドの1つを使用する。
この方法では、getObject
メソッドは、適切な復号化アルゴリズム用の暗号オブジェクトを作成し、シール済みのオブジェクトに格納された特定の復号化鍵およびアルゴリズム・パラメータ(存在する場合)を使用してそれを初期化します。
この方式には、オブジェクトをシール解除する当事者はオブジェクトをシールするのに使用されたパラメータ(たとえば、IV)を追跡する必要がないという利点があります。
修飾子と型 | フィールドと説明 |
---|---|
protected byte[] |
encodedParams
シールする暗号によって使用される、デフォルトの形式でエンコードされた暗号化パラメータです。
|
修飾子 | コンストラクタと説明 |
---|---|
protected |
SealedObject(SealedObject so)
渡されたSealedObjectオブジェクトからSealedObjectオブジェクトを構築します。
|
|
SealedObject(Serializable object, Cipher c)
任意のSerializableオブジェクトからSealedObjectを構築します。
|
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のインスタンスが使用されます。指定されたアルゴリズムがデフォルトのパッケージで使用可能でない場合は、ほかのパッケージが検索されます。Cipherオブジェクトは、指定されたkey
と、シール操作に使用されたパラメータ(もしあれば)を使用して、復号化用に初期化されます。
カプセル化されたオブジェクトは、シールと直列化を解除してから返されます。
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
からそのアルゴリズムの実装を使用して作成します。Cipherオブジェクトは、指定されたkey
と、シール操作に使用されたパラメータ(もしあれば)を使用して、復号化用に初期化されます。
カプセル化されたオブジェクトは、シールと直列化を解除してから返されます。
key
- オブジェクトをシール解除するのに使用する鍵。provider
- オブジェクトをシール解除するアルゴリズムのプロバイダ名。IllegalArgumentException
- 指定されたプロバイダがnullか空の場合。IOException
- 直列化解除でエラーが発生した場合。ClassNotFoundException
- 直列化解除でエラーが発生した場合。NoSuchAlgorithmException
- オブジェクトをシール解除するアルゴリズムがない場合。NoSuchProviderException
- 指定されたプロバイダが設定されていない場合。InvalidKeyException
- アルゴリズムが間違っている場合など、指定された鍵を使用してオブジェクトをシール解除できない場合。NullPointerException
- key
がnullである場合。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.