public class KeyAgreement extends Object
共有の秘密の確立に関係するキーは、キー・ジェネレータのいずれか(KeyPairGenerator
またはKeyGenerator
)かKeyFactory
によって、またはキー協定プロトコルの中間フェーズの結果として作成されます。
キー交換の対応関係ごとに、doPhase
を呼び出す必要があります。 たとえば、キー交換の相手が1つの場合は、lastPhase
フラグをtrue
に設定してdoPhase
を1回呼び出す必要があります。 キー交換の相手が2つの場合は、最初はlastPhase
フラグをfalse
に設定し、2回目はtrue
に設定して、doPhase
を2回呼び出す必要があります。 キー交換の相手の数は任意です。
Javaプラットフォームの実装は、すべて次の標準のKeyAgreement
アルゴリズムをサポートする必要があります。
DiffieHellman
KeyGenerator
, SecretKey
修飾子 | コンストラクタ | 説明 |
---|---|---|
protected |
KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm) |
KeyAgreementオブジェクトを生成します。
|
修飾子と型 | メソッド | 説明 |
---|---|---|
Key |
doPhase(Key key, boolean lastPhase) |
このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。
|
byte[] |
generateSecret() |
共有の秘密情報を生成して新しいバッファ内に返します。
|
int |
generateSecret(byte[] sharedSecret, int offset) |
共有の秘密情報を生成して、
offset から始まるsharedSecret バッファ内に格納します。 |
SecretKey |
generateSecret(String algorithm) |
共有の秘密情報を作成して、それを指定されたアルゴリズムの
SecretKey オブジェクトとして返します。 |
String |
getAlgorithm() |
この
KeyAgreement オブジェクトのアルゴリズム名を返します。 |
static KeyAgreement |
getInstance(String algorithm) |
指定したキー合意アルゴリズムを実装する
KeyAgreement オブジェクトを返します。 |
static KeyAgreement |
getInstance(String algorithm, Provider provider) |
指定したキー合意アルゴリズムを実装する
KeyAgreement オブジェクトを返します。 |
static KeyAgreement |
getInstance(String algorithm, String provider) |
指定したキー合意アルゴリズムを実装する
KeyAgreement オブジェクトを返します。 |
Provider |
getProvider() |
この
KeyAgreement オブジェクトのプロバイダを返します。 |
void |
init(Key key) |
指定されたキーでこのキー合意を初期化します。これには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。
|
void |
init(Key key, AlgorithmParameterSpec params) |
指定されたキーとアルゴリズム・パラメータのセットを使用してこのキー合意を初期化します。
|
void |
init(Key key, AlgorithmParameterSpec params, SecureRandom random) |
指定されたキー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこのキー合意を初期化します。
|
void |
init(Key key, SecureRandom random) |
指定されたキーと乱数発生の元でこのキー合意を初期化します。
|
protected KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm)
keyAgreeSpi
- 委譲先provider
- プロバイダalgorithm
- アルゴリズムpublic final String getAlgorithm()
KeyAgreement
オブジェクトのアルゴリズム名を返します。
これは、このKeyAgreement
オブジェクトを作成したgetInstance
呼出しのいずれかに指定された名前と同じです。
KeyAgreement
オブジェクトのアルゴリズム名。public static final KeyAgreement getInstance(String algorithm) throws NoSuchAlgorithmException
KeyAgreement
オブジェクトを返します。
このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムをサポートする最初のプロバイダのKeyAgreementSpi実装をカプセル化する新しいKeyAgreementオブジェクトが返されます。
登録済みプロバイダのリストは、Security.getProviders()
メソッド経由で取得できます。
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準のアルゴリズム名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのKeyAgreementのセクションを参照。 KeyAgreement
オブジェクト。NullPointerException
- 指定されたアルゴリズムがnullである場合。NoSuchAlgorithmException
- 指定したアルゴリズムのKeyAgreementSpi実装をサポートするプロバイダが存在しない場合。Provider
public static final KeyAgreement getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
KeyAgreement
オブジェクトを返します。
指定されたプロバイダからのKeyAgreementSpiの実装をカプセル化する新しいKeyAgreementオブジェクトが返されます。 指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。
登録済みプロバイダのリストは、Security.getProviders()
メソッド経由で取得できます。
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準のアルゴリズム名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのKeyAgreementのセクションを参照。 provider
- プロバイダ名KeyAgreement
オブジェクト。NullPointerException
- 指定されたアルゴリズムがnullである場合。NoSuchAlgorithmException
- 指定されたプロバイダに指定されたアルゴリズムのKeyAgreementSpiの実装がない場合。NoSuchProviderException
- 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合IllegalArgumentException
- provider
がnullまたは空の場合Provider
public static final KeyAgreement getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
KeyAgreement
オブジェクトを返します。
指定されたProviderオブジェクトからのKeyAgreementSpiの実装をカプセル化する新しいKeyAgreementオブジェクトが返されます。 指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。
algorithm
- 要求されたキー合意アルゴリズムの標準名。 標準のアルゴリズム名については、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのKeyAgreementのセクションを参照。 provider
- プロバイダKeyAgreement
オブジェクト。NullPointerException
- 指定されたアルゴリズムがnullである場合。NoSuchAlgorithmException
- 指定されたProviderオブジェクトに指定されたアルゴリズムのKeyAgreementSpiの実装がない場合。IllegalArgumentException
- provider
がnullの場合Provider
public final Provider getProvider()
KeyAgreement
オブジェクトのプロバイダを返します。KeyAgreement
オブジェクトのプロバイダpublic final void init(Key key) throws InvalidKeyException
このキー合意が乱数バイトを必要とする場合は、インストールされているプロバイダのうち、もっとも優先順位の高いプロバイダのSecureRandom
の実装を乱数発生の元として使用して乱数バイトを取得します。 SecureRandomを提供するプロバイダが1つもインストールされていない場合は、システムが提供する乱数発生の元が使用されます。
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キー InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。public final void init(Key key, SecureRandom random) throws InvalidKeyException
キー合意アルゴリズムが乱数バイトを必要とする場合は、指定された乱数発生の元random
から取得します。 ただし、基本となるアルゴリズム実装が乱数バイトを必要としない場合、random
は無視されます。
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キー random
- 乱数発生の元InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。public final void init(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException
このキー合意が乱数バイトを必要とする場合は、インストールされているプロバイダのうち、もっとも優先順位の高いプロバイダのSecureRandom
の実装を乱数発生の元として使用して乱数バイトを取得します。 SecureRandomを提供するプロバイダが1つもインストールされていない場合は、システムが提供する乱数発生の元が使用されます。
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キー params
- キー合意パラメータInvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。InvalidAlgorithmParameterException
- 指定されたパラメータがこのキー合意に不適切な場合。public final void init(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キー params
- キー合意パラメータrandom
- 乱数発生の元InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。InvalidAlgorithmParameterException
- 指定されたパラメータがこのキー合意に不適切な場合。public final Key doPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException
key
- この段階のキー。 たとえば、2当事者間のDiffie-Hellmanの場合は、相手のDiffie-Hellman公開キー lastPhase
- これがこのキー合意の最後の段階かどうかを示すフラグ。InvalidKeyException
- 指定されたキーがこの段階に不適切な場合。IllegalStateException
- このキー合意が初期化されていない場合。public final byte[] generateSecret() throws IllegalStateException
このメソッドは、このKeyAgreement
オブジェクトをリセットするので、さらにほかのキー合意に再使用できます。 このキー合意がinit
メソッドの1つで再初期化されない場合、その後のキー合意では、同じ非公開情報とアルゴリズム・パラメータが使用されます。
IllegalStateException
- このキー合意がまだ完了していない場合public final int generateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException
offset
から始まるsharedSecret
バッファ内に格納します。
sharedSecret
バッファが小さすぎて結果を保持できない場合は、ShortBufferException
がスローされます。 この場合、より大きな出力バッファを使用してこの呼出しを繰り返します。
このメソッドは、このKeyAgreement
オブジェクトをリセットするので、さらにほかのキー合意に再使用できます。 このキー合意がinit
メソッドの1つで再初期化されない場合、その後のキー合意では、同じ非公開情報とアルゴリズム・パラメータが使用されます。
sharedSecret
- 共有の秘密情報を格納するバッファoffset
- 共有の秘密情報が格納されるsharedSecret
内のオフセットsharedSecret
に格納されたバイト数IllegalStateException
- このキー合意がまだ完了していない場合ShortBufferException
- 指定された出力バッファが小さすぎて秘密情報を保持できない場合public final SecretKey generateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException
SecretKey
オブジェクトとして返します。
このメソッドは、このKeyAgreement
オブジェクトをリセットするので、さらにほかのキー合意に再使用できます。 このキー合意がinit
メソッドの1つで再初期化されない場合、その後のキー合意では、同じ非公開情報とアルゴリズム・パラメータが使用されます。
algorithm
- 要求された秘密キーアルゴリズムIllegalStateException
- このキー合意がまだ完了していない場合NoSuchAlgorithmException
- 指定された秘密キーアルゴリズムがない場合InvalidKeyException
- 共有の秘密キー・マテリアルが、指定されたアルゴリズムの秘密キーを生成に使用できない場合 (キー・データが短すぎるなど) バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。