public class KeyAgreement extends Object
涉及建立共享秘密的密钥由密钥发生器( KeyPairGenerator
或KeyGenerator
)之一, KeyFactory
或由密钥协商协议的中间阶段的结果创建。
对于密钥交换中的doPhase
需要调用doPhase
。 例如,如果这个密钥交换是与另一方进行的, doPhase
需要被调用一次,其中lastPhase
标志设置为true
。 如果这个密钥交换是与另外两个方, doPhase
需要被叫两次,首次将lastPhase
标志设置为false
,第二次设置为true
。 密钥交换中可能存在任何数量的参与方。
Java平台的每个实现都需要支持以下标准KeyAgreement
算法:
KeyGenerator
, SecretKey
Modifier | Constructor and Description |
---|---|
protected |
KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm)
创建一个KeyAgreement对象。
|
Modifier and Type | Method and Description |
---|---|
Key |
doPhase(Key key, boolean lastPhase)
执行该关键协议的下一阶段,其中包含从本协议涉及的其中一方收到的给定密钥。
|
byte[] |
generateSecret()
生成共享密钥并将其返回到新的缓冲区。
|
int |
generateSecret(byte[] sharedSecret, int offset)
生成共享密钥,并将其放入缓冲区
sharedSecret ,从
offset 开始。
|
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
呼叫之一中指定的getInstance
。
KeyAgreement
对象的算法名称。
public static final KeyAgreement getInstance(String algorithm) throws NoSuchAlgorithmException
KeyAgreement
对象。
此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装KeyAgreementSpi实现的新KeyAgreement对象。
请注意,可以通过Security.getProviders()
方法检索已注册提供商的列表。
algorithm
- 所请求的密钥协商算法的标准名称。
看到该协议密钥部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
KeyAgreement
对象。
NullPointerException
- 如果指定的算法为空。
NoSuchAlgorithmException
- 如果没有提供者支持指定算法的KeyAgreementSpi实现。
Provider
public static final KeyAgreement getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
KeyAgreement
对象。
返回从指定提供程序封装KeyAgreementSpi实现的新KeyAgreement对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,可以通过Security.getProviders()
方法检索注册提供商的列表。
algorithm
- 请求的密钥协商算法的标准名称。
看到该协议密钥部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供商的名称。
KeyAgreement
对象。
NullPointerException
- 如果指定的算法为空。
NoSuchAlgorithmException
- 如果指定算法的KeyAgreementSpi实现不能从指定的提供者获得。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
IllegalArgumentException
- 如果
provider
为空或为空。
Provider
public static final KeyAgreement getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
KeyAgreement
对象。
返回从指定的Provider对象封装KeyAgreementSpi实现的新KeyAgreement对象。 请注意,指定的Provider对象不必在提供者列表中注册。
algorithm
- 请求密钥协议算法的标准名称。
看到该协议密钥部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供商。
KeyAgreement
对象。
NullPointerException
- 如果指定的算法为空。
NoSuchAlgorithmException
- 如果指定的算法的KeyAgreementSpi实现从指定的Provider对象不可用。
IllegalArgumentException
- 如果
provider
为空。
Provider
public final Provider getProvider()
KeyAgreement
对象的提供者。
KeyAgreement
对象的提供者
public final void init(Key key) throws InvalidKeyException
如果此项协议需要随机字节,它会使用让他们SecureRandom
实现的最高优先级安装的提供作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)
key
- 党的私人信息。
例如,在Diffie-Hellman密钥协议的情况下,这将是该方自己的Diffie-Hellman私钥。
InvalidKeyException
- 如果给定的密钥对于该密钥协议是不合适的,例如,是错误的类型或具有不兼容的算法类型。
public final void init(Key key, SecureRandom random) throws InvalidKeyException
如果密钥协商算法需要随机字节,则从给定的随机源获得它们, random
。 但是,如果底层算法实现不需要任何随机字节,则忽略random
。
key
- 党的私人信息。
例如,在Diffie-Hellman密钥协议的情况下,这将是该方自己的Diffie-Hellman私钥。
random
-
random
的来源
InvalidKeyException
- 如果给定的密钥对于该密钥协议是不合适的,例如,是错误的类型或具有不兼容的算法类型。
public final void init(Key key, AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException
如果此项协议需要随机字节,它会使用让他们SecureRandom
实现的最高优先级安装的提供作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)
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
-
random
的来源
InvalidKeyException
- 如果给定的密钥对于该密钥协议是不合适的,例如,是错误的类型或具有不兼容的算法类型。
InvalidAlgorithmParameterException
- 如果给定的参数不适用于此密钥协议。
public final Key doPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException
key
- 这个阶段的关键。
例如,在双方之间的Diffie-Hellman的情况下,这将是对方的Diffie-Hellman公钥。
lastPhase
- 表示这是否是该密钥协议的最后一个阶段的标志。
InvalidKeyException
- 如果给定的键不适合此阶段。
IllegalStateException
- 如果此密钥协议尚未初始化。
public final byte[] generateSecret() throws IllegalStateException
此方法重置此KeyAgreement
对象,以便可以重新用于进一步的关键协议。 除非使用init
方法重新初始化该密钥协议,否则相同的私有信息和算法参数将用于后续密钥协议。
IllegalStateException
- 如果此关键协议尚未完成
public final int generateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException
sharedSecret
,从offset
开始。
如果sharedSecret
缓冲区太小而不能保存结果,则抛出ShortBufferException
。 在这种情况下,应该使用较大的输出缓冲区来重复此调用。
此方法重置此KeyAgreement
对象,以便可以重新用于进一步的关键协议。 除非使用init
方法重新初始化此密钥协议,否则相同的私有信息和算法参数将用于后续密钥协议。
sharedSecret
- 共享密码的缓冲区
offset
-
sharedSecret
中的共享密钥将被存储的偏移量
sharedSecret
的字节数
IllegalStateException
- 如果此关键协议尚未完成
ShortBufferException
- 如果给定的输出缓冲区太小,不能容纳秘密
public final SecretKey generateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException
SecretKey
对象返回。
此方法重置此KeyAgreement
对象,以便可以重新用于进一步的关键协议。 除非使用init
方法重新初始化该密钥协议,否则相同的私有信息和算法参数将用于后续密钥协议。
algorithm
- 所请求的秘密密钥算法
IllegalStateException
- 如果此关键协议尚未完成
NoSuchAlgorithmException
- 如果指定的秘密密钥算法不可用
InvalidKeyException
- 如果共享的密钥材料不能用于生成指定算法的密钥(例如,密钥材料太短)