模块  java.base
软件包  javax.crypto

Class KeyAgreementSpi


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

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

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

    从以下版本开始:
    1.4
    另请参见:
    KeyGeneratorSecretKey
    • 构造方法详细信息

      • KeyAgreementSpi

        public KeyAgreementSpi()
    • 方法详细信息

      • engineInit

        protected abstract void engineInit​(Key key,
                                           SecureRandom random)
                                    throws InvalidKeyException
        使用给定的密钥和随机源初始化此密钥协议。 给定密钥需要包含此密钥协议所需的所有算法参数。

        如果密钥协商算法需要随机字节,则从给定的随机源random获取它们。 但是,如果基础算法实现不需要任何随机字节,则忽略random

        参数
        key - 该党的私人信息。 例如,在Diffie-Hellman密钥协议的情况下,这将是该方自己的Diffie-Hellman私钥。
        random - 随机性的来源
        异常
        InvalidKeyException - 如果给定密钥不适合此密钥协议,例如,类型错误或具有不兼容的算法类型。
      • 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 - 如果共享密钥材料不能用于生成所请求算法类型的密钥(例如,密钥材料太短)