- 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
-
-
构造方法摘要
构造方法 Constructor 描述 KeyAgreementSpi()
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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
- 如果共享密钥资料不能用于生成请求的算法类型的密钥(例如,密钥材料太短)
-
-