- java.lang.Object
-
- javax.crypto.KeyAgreementSpi
-
public abstract class KeyAgreementSpi extends Object
此类定义KeyAgreement
类的 ( SPI )。 此类中的所有抽象方法必须由希望提供特定密钥协商算法实现的每个加密服务提供者实现。建立共享秘密所涉及的密钥由密钥生成器之一(
KeyPairGenerator
或KeyGenerator
),KeyFactory
,或者作为密钥协商协议(engineDoPhase
)的中间阶段的结果创建 。对于密钥交换中的每个通讯员,需要调用
engineDoPhase
。 例如,如果密钥交换是与另一方进行的,engineDoPhase
需要调用lastPhase
一次,并将lastPhase
标志设置为true
。 如果密钥交换与另外两方进行,engineDoPhase
需要调用engineDoPhase
两次,第一次将lastPhase
标志设置为false
,第二次将其设置为true
。 密钥交换可能涉及任意数量的各方。- 从以下版本开始:
- 1.4
- 另请参见:
-
KeyGenerator
,SecretKey
-
-
构造方法摘要
构造方法 构造器 描述 KeyAgreementSpi()
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 protected abstract Key
engineDoPhase(Key key, boolean lastPhase)
使用从此密钥协议中涉及的其他方之一收到的给定密钥执行此密钥协议的下一阶段。protected abstract byte[]
engineGenerateSecret()
生成共享密钥并将其返回到新缓冲区。protected abstract int
engineGenerateSecret(byte[] sharedSecret, int offset)
生成共享秘密,并将其放入缓冲区sharedSecret
,从offset
开始。protected abstract SecretKey
engineGenerateSecret(String algorithm)
创建共享密钥并将其作为所请求算法类型的密钥对象返回。protected abstract void
engineInit(Key key, SecureRandom random)
使用给定的密钥和随机源初始化此密钥协议。protected abstract void
engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random)
使用给定密钥,算法参数集和随机源初始化此密钥协议。
-
-
-
方法详细信息
-
engineInit
protected abstract void engineInit(Key key, SecureRandom random) throws InvalidKeyException
使用给定的密钥和随机源初始化此密钥协议。 给定密钥需要包含此密钥协议所需的所有算法参数。如果密钥协商算法需要随机字节,则从给定的随机源
random
获取它们。 但是,如果基础算法实现不需要任何随机字节,则忽略random
。- 参数
-
key
- 该党的私人信息。 例如,在Diffie-Hellman密钥协议的情况下,这将是该方自己的Diffie-Hellman私钥。 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定密钥不适合此密钥协议,例如,类型错误或具有不兼容的算法类型。
-
engineInit
protected abstract void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
使用给定密钥,算法参数集和随机源初始化此密钥协议。- 参数
-
key
- 该党的私人信息。 例如,在Diffie-Hellman密钥协议的情况下,这将是该方自己的Diffie-Hellman私钥。 -
params
- 关键协议参数 -
random
- 随机性的来源 - 异常
-
InvalidKeyException
- 如果给定密钥不适合此密钥协议,例如,类型错误或具有不兼容的算法类型。 -
InvalidAlgorithmParameterException
- 如果给定的参数不适合此密钥协议。
-
engineDoPhase
protected abstract Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException
使用从此密钥协议中涉及的其他方之一收到的给定密钥执行此密钥协议的下一阶段。- 参数
-
key
- 这个阶段的关键。 例如,在两方之间的Diffie-Hellman的情况下,这将是另一方的Diffie-Hellman公钥。 -
lastPhase
- 指示这是否是此密钥协议的最后阶段的标志。 - 结果
- 此阶段产生的(中间)键,如果此阶段不产生键,则返回null
- 异常
-
InvalidKeyException
- 如果给定的密钥不适合此阶段。 -
IllegalStateException
- 如果此密钥协议尚未初始化。
-
engineGenerateSecret
protected abstract byte[] engineGenerateSecret() throws IllegalStateException
生成共享密钥并将其返回到新缓冲区。此方法重置此
KeyAgreementSpi
对象,以便可以将其重用于其他密钥协议。 除非使用engineInit
方法之一重新初始化此密钥协议,否则相同的私有信息和算法参数将用于后续密钥协议。- 结果
- 具有共享密钥的新缓冲区
- 异常
-
IllegalStateException
- 如果此密钥协议尚未完成
-
engineGenerateSecret
protected abstract int engineGenerateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException
生成共享秘密,并将其放入缓冲区sharedSecret
,从offset
开始。如果
sharedSecret
缓冲区太小而无法保存结果,则抛出ShortBufferException
。 在这种情况下,应使用更大的输出缓冲区重复此调用。此方法重置此
KeyAgreementSpi
对象,以便可以将其重用于其他密钥协议。 除非使用engineInit
方法之一重新初始化此密钥协议,否则相同的私有信息和算法参数将用于后续密钥协议。- 参数
-
sharedSecret
- 共享密钥的缓冲区 -
offset
- 将存储共享密钥的sharedSecret
中的偏移量 - 结果
-
放入
sharedSecret
的字节数 - 异常
-
IllegalStateException
- 如果此密钥协议尚未完成 -
ShortBufferException
- 如果给定的输出缓冲区太小而无法保存秘密
-
engineGenerateSecret
protected abstract SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException
创建共享密钥并将其作为所请求算法类型的密钥对象返回。此方法重置此
KeyAgreementSpi
对象,以便可以将其重用于进一步的密钥协议。 除非使用engineInit
方法之一重新初始化此密钥协议,否则相同的私有信息和算法参数将用于后续密钥协议。- 参数
-
algorithm
- 请求的密钥算法 - 结果
- 共享密钥
- 异常
-
IllegalStateException
- 如果此密钥协议尚未完成 -
NoSuchAlgorithmException
- 如果请求的密钥算法不可用 -
InvalidKeyException
- 如果共享密钥材料不能用于生成所请求算法类型的密钥(例如,密钥材料太短)
-
-