java.lang.Object javax.crypto.KeyAgreementSpi
public abstract class KeyAgreementSpi
此类为 KeyAgreement
类定义了服务提供者接口 (SPI)。此类中的所有抽象方法必须由希望提供特定密钥一致算法实现的每个加密服务提供者来实现。
建立共享秘密所涉及的密钥由某个密钥生成器(KeyPairGenerator
或 KeyGenerator
,一个 KeyFactory
)来创建,或从密钥协定协议的中间阶段来创建 (engineDoPhase
)。
对于密钥交换中的每个对应物,需要调用 engineDoPhase
。例如,如果密钥交换是与其他一个参与者进行的,则需要调用一次 engineDoPhase
,将 lastPhase
标志设置为 true
。如果密钥交换是与其他两个参与者进行的,则需要调用两次 engineDoPhase
,第一次将 lastPhase
标志设置为 false
,第二次将它设置为 true
。密钥交换可能涉及任意数量的参与者。
KeyGenerator
,
SecretKey
构造方法摘要 | |
---|---|
KeyAgreementSpi() |
方法摘要 | |
---|---|
protected abstract Key |
engineDoPhase(Key key, boolean lastPhase) 用给定密钥执行此密钥协定的下一个阶段,该给定密钥是从此密钥协定中涉及的其他某个参与者那里接收的。 |
protected abstract byte[] |
engineGenerateSecret() 生成共享秘密密钥并在新的缓冲区中返回它。 |
protected abstract int |
engineGenerateSecret(byte[] sharedSecret, int offset) 生成共享秘密密钥,并将从 offset 开始(包括)的部分放入缓冲区 sharedSecret 。 |
protected abstract SecretKey |
engineGenerateSecret(String algorithm) 创建共享秘密密钥,并将它作为所请求算法类型的秘密密钥对象返回。 |
protected abstract void |
engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) 用给定密钥、算法参数集和随机源初始化此密钥协定。 |
protected abstract void |
engineInit(Key key, SecureRandom random) 用给定密钥和随机源初始化此密钥协定。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public KeyAgreementSpi()
方法详细信息 |
---|
protected abstract void engineInit(Key key, SecureRandom random) throws InvalidKeyException
如果该密钥一致算法需要随机字节,则从给定的随机源 random
中获取它们。不过,如果底层算法实现不需要任何随机字节,则忽略 random
。
key
- 参与者的私有信息。例如,对于 Diffie-Hellman 密钥协定,这应是参与者自己的 Diffie-Hellman 私钥。
random
- 随机源
InvalidKeyException
- 如果给定的密钥不适合此密钥协定,即属于错误类型或有一个不一致的算法类型。
protected abstract void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
key
- 参与者的私有信息。例如,对于 Diffie-Hellman 密钥协定,这应是参与者自己的 Diffie-Hellman 私钥。
params
- 密钥协定参数
random
- 随机源
InvalidKeyException
- 如果给定的密钥不适合此密钥协定,即属于错误类型或有一个不一致的算法类型。
InvalidAlgorithmParameterException
- 如果给定算法不适合此密钥协定。
protected abstract Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException
key
- 此阶段的密钥。例如,对于两个参与者之间的 Diffie-Hellman,此密钥应是其他参与者的 Diffie-Hellman 公钥。
lastPhase
- 指示这是否是此密钥协定的最后阶段的标志。
InvalidKeyException
- 如果给定密钥不适合此阶段。
IllegalStateException
- 如果尚未初始化此密钥协定。
protected abstract byte[] engineGenerateSecret() throws IllegalStateException
此方法重新设置此 KeyAgreementSpi
对象,以便能够将它重新用于进一步的密钥协定。如果没有使用某个 engineInit
方法重新初始化此密钥协定,则将相同的私有信息和算法参数用于后续密钥协定。
IllegalStateException
- 如果尚未实现此密钥协定
protected abstract int engineGenerateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException
offset
开始(包括)的部分放入缓冲区
sharedSecret
。
如果 sharedSecret
缓冲区太小而无法保存该结果,则抛出 ShortBufferException
。在此情况下,应该用更大的输出缓冲区重复进行此调用。
此方法重新设置此 KeyAgreementSpi
对象,以便能够将它重新用于进一步的密钥协定。如果没有使用某个 engineInit
方法重新初始化此密钥协定,则将相同的私有信息和算法参数用于后续密钥协定。
sharedSecret
- 共享秘密密钥的缓冲区
offset
- 将存储共享秘密密钥的
sharedSecret
中的偏移量
sharedSecret
中的字节数
IllegalStateException
- 如果尚未实现此密钥协定
ShortBufferException
- 如果给定输出缓冲区太小而无法保存该秘密密钥
protected abstract SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException
此方法重新设置此 KeyAgreementSpi
对象,以便能够将它重新用于进一步的密钥协定。如果没有使用某个 engineInit
方法重新初始化此密钥协定,则将相同的私有信息和算法参数用于后续密钥协定。
algorithm
- 所请求秘密密钥的算法
IllegalStateException
- 如果此密钥协定尚未实现
NoSuchAlgorithmException
- 如果所请求的秘密密钥算法不可用
InvalidKeyException
- 如果无法使用共享秘密密钥材料生成所请求算法类型的秘密密钥(例如,密钥材料太短缺)