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