模块 java.base

类 KeyAgreementSpi

java.lang.Object
javax.crypto.KeyAgreementSpi

public abstract class KeyAgreementSpi extends Object
这个类定义了服务提供商接口 (SPI) 为 KeyAgreement 类。此类中的所有抽象方法必须由每个希望提供特定密钥协商算法实现的密码服务提供者实现。

建立共享秘密所涉及的密钥由密钥生成器之一(KeyPairGeneratorKeyGenerator)、KeyFactory 或作为密钥协商协议(engineDoPhase )中间阶段的结果创建。

对于密钥交换中的每个通信者,都需要调用 engineDoPhase。例如,如果密钥交换是与另一方进行的,则需要调用 engineDoPhase 一次,并将 lastPhase 标志设置为 true 。如果密钥交换是与其他双方进行的,则需要调用 engineDoPhase 两次,第一次将 lastPhase 标志设置为 false ,第二次将其设置为 true 。密钥交换可能涉及任意数量的参与方。

自从:
1.4
参见:
  • 构造方法详细信息

    • KeyAgreementSpi

      public KeyAgreementSpi()
      子类调用的构造方法。
  • 方法详情

    • 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 - 此阶段的关键。例如,在 2 方之间的 Diffie-Hellman 情况下,这将是另一方的 Diffie-Hellman 公钥。
      lastPhase - 指示这是否是此密钥协议的最后阶段的标志。
      返回:
      此阶段产生的(中间)密钥,如果此阶段未产生密钥,则为 null
      抛出:
      InvalidKeyException - 如果给定的密钥不适合此阶段。
      IllegalStateException - 如果此密钥协议尚未初始化。
    • engineGenerateSecret

      protected abstract byte[] engineGenerateSecret() throws IllegalStateException
      生成共享机密并将其返回到新缓冲区中。

      此方法将此 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 - 如果共享密钥材料不能用于生成所请求算法类型的密钥(例如,密钥材料太短)