Module java.base
Package javax.crypto

Class KeyAgreementSpi

java.lang.Object
javax.crypto.KeyAgreementSpi

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

用于建立共享密钥的密钥是由密钥生成器之一(KeyPairGeneratorKeyGenerator)、一个KeyFactory或作为密钥协议的中间阶段的结果(engineDoPhase)创建的。

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

自从:
1.4
参见:
  • Constructor Details

    • KeyAgreementSpi

      public KeyAgreementSpi()
      子类调用的构造函数。
  • Method Details

    • 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对象重置为最近调用init方法后的状态。调用generateSecret后,对象可以通过调用doPhase提供新密钥,然后调用generateSecret生成新密钥,以便用于进一步的密钥协议操作。在这种情况下,供给init的私有信息和算法参数将用于多个密钥协议操作。可以在generateSecret后调用init以更改用于后续操作的私有信息。

      返回:
      具有共享密钥的新缓冲区
      抛出:
      IllegalStateException - 如果此密钥协议尚未初始化或者如果尚未调用doPhase为协议中的所有方提供密钥
    • engineGenerateSecret

      protected abstract int engineGenerateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException
      生成共享密钥,并将其放入从offset开始的缓冲区sharedSecret中。

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