KeyAgreement 类。此类中的所有抽象方法必须由每个希望提供特定密钥协商算法实现的密码服务提供者实现。
建立共享秘密所涉及的密钥由密钥生成器之一(KeyPairGenerator 或 KeyGenerator)、KeyFactory 或作为密钥协商协议(engineDoPhase )中间阶段的结果创建。
对于密钥交换中的每个通信者,都需要调用 engineDoPhase。例如,如果密钥交换是与另一方进行的,则需要调用 engineDoPhase 一次,并将 lastPhase 标志设置为 true 。如果密钥交换是与其他双方进行的,则需要调用 engineDoPhase 两次,第一次将 lastPhase 标志设置为 false ,第二次将其设置为 true 。密钥交换可能涉及任意数量的参与方。
- 自从:
- 1.4
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述protected abstract KeyengineDoPhase(Key key, boolean lastPhase) 参与此密钥协议的其他方之一收到的给定密钥执行此密钥协议的下一阶段。protected abstract byte[]生成共享机密并将其返回到新缓冲区中。protected abstract intengineGenerateSecret(byte[] sharedSecret, int offset) 生成共享密钥,并将其放入缓冲区sharedSecret,从offset开始(含)。protected abstract SecretKeyengineGenerateSecret(String algorithm) 创建共享机密并将其作为请求算法类型的密钥对象返回。protected abstract voidengineInit(Key key, SecureRandom random) 使用给定的密钥和随机源初始化此密钥协议。protected abstract voidengineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) 使用给定的密钥、算法参数集和随机源初始化此密钥协议。
-
构造方法详细信息
-
KeyAgreementSpi
public KeyAgreementSpi()子类调用的构造方法。
-
-
方法详情
-
engineInit
使用给定的密钥和随机源初始化此密钥协议。要求给定的密钥包含本次密钥协商所需的所有算法参数。如果密钥协商算法需要随机字节,它会从给定的随机源
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- 此阶段的关键。例如,在 2 方之间的 Diffie-Hellman 情况下,这将是另一方的 Diffie-Hellman 公钥。lastPhase- 指示这是否是此密钥协议的最后阶段的标志。- 返回:
-
此阶段产生的(中间)密钥,如果此阶段未产生密钥,则为
null - 抛出:
InvalidKeyException- 如果给定的密钥不适合此阶段。IllegalStateException- 如果此密钥协议尚未初始化。
-
engineGenerateSecret
生成共享机密并将其返回到新缓冲区中。此方法将此
KeyAgreementSpi对象重置为它在最近一次调用init方法之一后所处的状态。调用generateSecret后,可以通过调用doPhase提供新密钥,然后调用generateSecret生成新密钥,将对象重新用于进一步的密钥协商操作。在这种情况下,提供给init的私有信息和算法参数将用于多个密钥协商操作。在generateSecret之后可以调用init方法来改变后续操作中使用的私有信息。- 返回:
- 具有共享秘密的新缓冲区
- 抛出:
IllegalStateException- 如果此密钥协议尚未初始化,或者如果尚未调用doPhase为协议中的各方提供密钥
-
engineGenerateSecret
protected abstract int engineGenerateSecret(byte[] sharedSecret, int offset) throws IllegalStateException , ShortBufferException 生成共享密钥,并将其放入缓冲区sharedSecret,从offset开始(含)。如果
sharedSecret缓冲区太小无法容纳结果,则会抛出ShortBufferException。在这种情况下,应使用更大的输出缓冲区重复此调用。此方法将此
KeyAgreementSpi对象重置为它在最近一次调用init方法之一后所处的状态。调用generateSecret后,可以通过调用doPhase提供新密钥,然后调用generateSecret生成新密钥,将对象重新用于进一步的密钥协商操作。在这种情况下,提供给init的私有信息和算法参数将用于多个密钥协商操作。在generateSecret之后可以调用init方法来改变后续操作中使用的私有信息。- 参数:
sharedSecret- 共享秘密的缓冲区offset-sharedSecret中将存储共享秘密的偏移量- 返回:
-
放入
sharedSecret的字节数 - 抛出:
IllegalStateException- 如果此密钥协议尚未初始化,或者如果尚未调用doPhase为协议中的各方提供密钥ShortBufferException- 如果给定的输出缓冲区太小而无法保存秘密
-
engineGenerateSecret
protected abstract SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException , NoSuchAlgorithmException , InvalidKeyException 创建共享机密并将其作为请求算法类型的密钥对象返回。此方法将此
KeyAgreementSpi对象重置为它在最近一次调用init方法之一后所处的状态。调用generateSecret后,可以通过调用doPhase提供新密钥,然后调用generateSecret生成新密钥,将对象重新用于进一步的密钥协商操作。在这种情况下,提供给init的私有信息和算法参数将用于多个密钥协商操作。在generateSecret之后可以调用init方法来改变后续操作中使用的私有信息。- 参数:
algorithm- 请求的密钥算法- 返回:
- 共享密钥
- 抛出:
IllegalStateException- 如果此密钥协议尚未初始化,或者如果尚未调用doPhase为协议中的各方提供密钥NoSuchAlgorithmException- 如果请求的密钥算法不可用InvalidKeyException- 如果共享密钥材料不能用于生成所请求算法类型的密钥(例如,密钥材料太短)
-