Module  java.base
软件包  javax.crypto

Class Cipher

  • 已知直接子类:
    NullCipher


    public class Cipher
    extends Object
    该类提供加密和解密的加密密码的功能。 它构成了Java加密扩展(JCE)框架的核心。

    为了创建一个Cipher对象,应用程序调用Cipher的getInstance方法,并将所请求的转换的名称传递给它。 可选地,可以指定提供者的名称。

    转换是描述要在给定输入上执行的操作(或操作集)的字符串,以产生一些输出。 转换总是包括加密算法的名称(例如, DES ),并且可以跟随有反馈模式和填充方案。

    转换形式如下:

    • 算法/模式/填充 ”或
    • 算法

    (在后一种情况下,使用模式和填充方案的提供者特定的默认值)。 例如,以下是有效的转换:

      Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
    使用诸如CFBOFB模式,块密码可以以比密码的实际块大OFB单位加密数据。 当请求这样的模式时,您可以通过将该号码追加到“ DES/CFB8/NoPadding ”和“ DES/OFB32/PKCS5Padding ”转换中所示的模式名称来指定要一次处理的位数。 如果没有指定此类号码,则使用特定于提供者的默认值。 (例如,SunJCE提供程序对DES使用默认值为64位)。因此,通过使用诸如CFB8或OFB8之类的8位模式,块密码可以转换为面向字节的流密码。

    诸如使用关联数据的认证加密(AEAD)等模式为机密数据和未加密的附加关联数据(AAD)提供真实性保证。 (有关AEAD和AAD算法(如GCM / CCM)的更多信息,请参阅RFC 5116。 )计算认证标签时可以使用机密数据和AAD数据(类似于Mac )。 该标签在加密期间附加到密文,并在解密后进行验证。

    AEAD模式如GCM / CCM在开始密文真实性计算之前执行所有的AAD真实性计算。 为了避免必须在内部缓冲器的密文实施方案中,所有数据AAD必须提供给GCM / CCM的实现(经由updateAAD方法)密文被处理之前 (通过updatedoFinal方法)。

    注意,GCM模式对于使用给定密钥加密的IV具有唯一性要求。 当GCM加密重复IVs时,这些用法将遭受伪造攻击。 因此,在使用GCM模式的每个加密操作之后,呼叫者应使用具有不同IV值的GCM参数重新初始化密码对象。

      GCMParameterSpec s = ...;
         cipher.init(..., s);
    
         // If the GCM parameters were generated by the provider, it can
         // be retrieved by:
         // cipher.getParameters().getParameterSpec(GCMParameterSpec.class);
    
         cipher.updateAAD(...);  // AAD
         cipher.update(...);     // Multi-part update
         cipher.doFinal(...);    // conclusion of operation
    
         // Use a different IV value for every encryption
         byte[] newIv = ...;
         s = new GCMParameterSpec(s.getTLen(), newIv);
         cipher.init(..., s);
         ... 
    Java平台的每个实现都需要支持以下标准的Cipher转换,括号中的键入:
    • AES/CBC/NoPadding (128)
    • AES/CBC/PKCS5Padding (128)
    • AES/ECB/NoPadding (128)
    • AES/ECB/PKCS5Padding (128)
    • AES/GCM/NoPadding (128)
    • DES/CBC/NoPadding (56)
    • DES/CBC/PKCS5Padding (56)
    • DES/ECB/NoPadding (56)
    • DES/ECB/PKCS5Padding (56)
    • DESede/CBC/NoPadding (168)
    • DESede/CBC/PKCS5Padding (168)
    • DESede/ECB/NoPadding (168)
    • DESede/ECB/PKCS5Padding (168)
    • RSA/ECB/PKCS1PaddingRSA/ECB/PKCS1Padding
    • RSA/ECB/OAEPWithSHA-1AndMGF1PaddingRSA/ECB/OAEPWithSHA-1AndMGF1Padding
    • RSA/ECB/OAEPWithSHA-256AndMGF1PaddingRSA/ECB/OAEPWithSHA-256AndMGF1Padding
    这些转换在Java安全标准算法名称规范的Cipher section中进行了描述。 请参阅实施的发行文档,以查看是否支持其他转换。
    从以下版本开始:
    1.4
    另请参见:
    KeyGeneratorSecretKey
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      static int DECRYPT_MODE
      常数用于将密码初始化为解密模式。
      static int ENCRYPT_MODE
      常数用于将密码初始化为加密模式。
      static int PRIVATE_KEY
      用于指示要解除密钥的常数是“私钥”。
      static int PUBLIC_KEY
      用于指示待解除密钥的常数是“公钥”。
      static int SECRET_KEY
      用于指示要解开的密钥的常数是“密钥”。
      static int UNWRAP_MODE
      常数用于将密码初始化为密钥解包模式。
      static int WRAP_MODE
      常数用于将密码初始化为密钥包装模式。
    • 构造方法摘要

      构造方法  
      Modifier Constructor 描述
      protected Cipher​(CipherSpi cipherSpi, Provider provider, String transformation)
      创建一个Cipher对象。
    • 方法摘要

      所有方法  静态方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      byte[] doFinal​()
      完成多部分加密或解密操作,这取决于该密码如何初始化。
      byte[] doFinal​(byte[] input)
      在单一部分操作中加密或解密数据,或完成多部分操作。
      int doFinal​(byte[] output, int outputOffset)
      完成多部分加密或解密操作,这取决于该密码如何初始化。
      byte[] doFinal​(byte[] input, int inputOffset, int inputLen)
      在单一部分操作中加密或解密数据,或完成多部分操作。
      int doFinal​(byte[] input, int inputOffset, int inputLen, byte[] output)
      在单一部分操作中加密或解密数据,或完成多部分操作。
      int doFinal​(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
      在单一部分操作中加密或解密数据,或完成多部分操作。
      int doFinal​(ByteBuffer input, ByteBuffer output)
      在单一部分操作中加密或解密数据,或完成多部分操作。
      String getAlgorithm​()
      返回此 Cipher对象的算法名称。
      int getBlockSize​()
      返回块大小(以字节为单位)。
      ExemptionMechanism getExemptionMechanism​()
      返回与此密码一起使用的豁免机制对象。
      static Cipher getInstance​(String transformation)
      返回实现指定转换的 Cipher对象。
      static Cipher getInstance​(String transformation, String provider)
      返回实现指定转换的 Cipher对象。
      static Cipher getInstance​(String transformation, Provider provider)
      返回实现指定转换的 Cipher对象。
      byte[] getIV​()
      返回新缓冲区中的初始化向量(IV)。
      static int getMaxAllowedKeyLength​(String transformation)
      根据已安装的JCE管辖区策略文件,返回指定转换的最大密钥长度。
      static AlgorithmParameterSpec getMaxAllowedParameterSpec​(String transformation)
      返回一个AlgorithmParameterSpec对象,该对象包含根据管辖区策略文件的最大密码参数值。
      int getOutputSize​(int inputLen)
      给定输入长度为 inputLen (以字节为单位),返回输出缓冲区需要保存下一个 updatedoFinal操作的结果的字节长度。
      AlgorithmParameters getParameters​()
      返回与此密码一起使用的参数。
      Provider getProvider​()
      返回此 Cipher对象的提供者。
      void init​(int opmode, Certificate certificate)
      使用给定证书中的公钥初始化此密码。
      void init​(int opmode, Certificate certificate, SecureRandom random)
      使用给定证书中的公钥和随机源初始化此密码。
      void init​(int opmode, Key key)
      用密钥初始化此密码。
      void init​(int opmode, Key key, AlgorithmParameters params)
      使用密钥和一组算法参数初始化此密码。
      void init​(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
      使用密钥,一组算法参数和随机源初始化此密码。
      void init​(int opmode, Key key, SecureRandom random)
      用密钥和随机源初始化此密码。
      void init​(int opmode, Key key, AlgorithmParameterSpec params)
      使用密钥和一组算法参数初始化此密码。
      void init​(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
      使用密钥,一组算法参数和随机源初始化此密码。
      Key unwrap​(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
      打开以前包装的钥匙。
      byte[] update​(byte[] input)
      继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
      byte[] update​(byte[] input, int inputOffset, int inputLen)
      继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
      int update​(byte[] input, int inputOffset, int inputLen, byte[] output)
      继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
      int update​(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
      继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
      int update​(ByteBuffer input, ByteBuffer output)
      继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
      void updateAAD​(byte[] src)
      继续进行附加认证数据(AAD)的多部分更新。
      void updateAAD​(byte[] src, int offset, int len)
      使用所提供的缓冲区的子集,继续进行附加认证数据(AAD)的多部分更新。
      void updateAAD​(ByteBuffer src)
      继续进行附加认证数据(AAD)的多部分更新。
      byte[] wrap​(Key key)
      包裹钥匙
    • 字段详细信息

      • ENCRYPT_MODE

        public static final int ENCRYPT_MODE
        常数用于将密码初始化为加密模式。
        另请参见:
        Constant Field Values
      • DECRYPT_MODE

        public static final int DECRYPT_MODE
        常数用于将密码初始化为解密模式。
        另请参见:
        Constant Field Values
      • WRAP_MODE

        public static final int WRAP_MODE
        常数用于将密码初始化为密钥包装模式。
        另请参见:
        Constant Field Values
      • UNWRAP_MODE

        public static final int UNWRAP_MODE
        常数用于将密码初始化为密钥解包模式。
        另请参见:
        Constant Field Values
      • PUBLIC_KEY

        public static final int PUBLIC_KEY
        用于指示待解除密钥的常数是“公钥”。
        另请参见:
        Constant Field Values
      • PRIVATE_KEY

        public static final int PRIVATE_KEY
        用于指示要解除密钥的常数是“私钥”。
        另请参见:
        Constant Field Values
      • SECRET_KEY

        public static final int SECRET_KEY
        用于指示要解开的密钥的常数是“密钥”。
        另请参见:
        Constant Field Values
    • 构造方法详细信息

      • Cipher

        protected Cipher​(CipherSpi cipherSpi,
                         Provider provider,
                         String transformation)
        创建一个Cipher对象。
        参数
        cipherSpi - 代表
        provider - 提供商
        transformation - 转型
    • 方法详细信息

      • getInstance

        public static final Cipher getInstance​(String transformation)
                                        throws NoSuchAlgorithmException,
                                               NoSuchPaddingException
        返回实现指定转换的Cipher对象。

        此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装CipherSpi实现的新Cipher对象。

        请注意,可以通过Security.getProviders()方法检索注册提供商的列表。

        Implementation Note:
        JDK参考实现另外使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。
        参数
        transformation - 转换的名称,例如DES / CBC / PKCS5Padding 有关标准转换名称的信息,请参阅Java Security Standard Algorithm Names Specification中的密码部分。
        结果
        一个实现请求的转换的密码
        异常
        NoSuchAlgorithmException - 如果 transformationnull ,为空,格式无效,或者如果没有 Provider支持指定算法的 CipherSpi实现
        NoSuchPaddingException - 如果 transformation包含不可用的填充方案
        另请参见:
        Provider
      • getProvider

        public final Provider getProvider​()
        返回此 Cipher对象的提供者。
        结果
        这个 Cipher对象的提供者
      • getAlgorithm

        public final String getAlgorithm​()
        返回此Cipher对象的算法名称。

        这是在创建此Cipher对象的getInstance呼叫之一中指定的名称。

        结果
        这个 Cipher对象的算法名称。
      • getBlockSize

        public final int getBlockSize​()
        返回块大小(以字节为单位)。
        结果
        块大小(以字节为单位),如果底层算法不是块密码,则为0
      • getOutputSize

        public final int getOutputSize​(int inputLen)
        给定输入长度为inputLen (以字节为单位),返回输出缓冲区需要保存下一个updatedoFinal操作的结果的字节长度。

        此呼叫考虑了来自以前的update呼叫,填充和AEAD标记的任何未处理(缓冲)数据。

        下一个updatedoFinal调用的实际输出长度可能小于此方法返回的长度。

        参数
        inputLen - 输入长度(以字节为单位)
        结果
        所需的输出缓冲区大小(以字节为单位)
        异常
        IllegalStateException - 如果此密码处于错误状态(例如尚未初始化)
      • getIV

        public final byte[] getIV​()
        返回新缓冲区中的初始化向量(IV)。

        这在创建随机IV的情况下或在基于密码的加密或解密的情况下是有用的,其中IV是从用户提供的密码导出的。

        结果
        新缓冲区中的初始化向量,如果底层算法不使用IV,或者如果IV尚未设置,则为null。
      • getParameters

        public final AlgorithmParameters getParameters​()
        返回与此密码一起使用的参数。

        返回的参数可能与用于初始化此密码的参数相同,或者如果该密码需要算法参数但未被任何初始化,则可能包含底层密码实现使用的默认值和随机参数值的组合。

        结果
        与此密码一起使用的参数,如果此密码不使用任何参数,则为null。
      • getExemptionMechanism

        public final ExemptionMechanism getExemptionMechanism​()
        返回与此密码一起使用的豁免机制对象。
        结果
        与此密码一起使用的豁免机制对象,如果此密码不使用任何豁免机制,则为null。
      • init

        public final void init​(int opmode,
                               Key key)
                        throws InvalidKeyException
        用密钥初始化此密码。

        根据opmode的值,对以下四个操作之一进行密码初始化:加密,解密,密钥包装或密钥解opmode

        如果此密码需要不能从给定的key导出的任何算法参数,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密或密钥包装,以及提出一个InvalidKeyException如果它被初始化解密或密钥解包。 可以使用getParametersgetIV (如果参数为IV)检索生成的参数。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),则将使用最高优先级安装的提供者的SecureRandom实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        key - 关键
        异常
        InvalidKeyException - 如果给定的密钥 InvalidKeyException初始化该密码,或者需要不能从给定密钥确定的算法参数,或者给定的密钥具有超过最大允许密钥大小的密钥大小(从配置的管辖区策略文件确定) 。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但是模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Key key,
                               SecureRandom random)
                        throws InvalidKeyException
        用密钥和随机源初始化此密码。

        根据opmode的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode

        如果此密码需要不能从给定的key导出的任何算法参数,则底层加密实现应该自动生成所需参数(使用提供者特定的默认值或随机值),如果它被初始化为加密或密钥包装,以及如果正在初始化解密或密钥解包,请提出一个InvalidKeyException 可以使用getParametersgetIV (如果参数为IV)检索生成的参数。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从random得到它们。

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        key - 加密密钥
        random - 随机性的来源
        异常
        InvalidKeyException - 如果给定的密钥 InvalidKeyException初始化该密码,或者需要不能从给定密钥确定的算法参数,或者如果给定密钥具有超过最大允许密钥大小的密钥大小(从配置的管辖区策略文件确定) 。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但是模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Key key,
                               AlgorithmParameterSpec params)
                        throws InvalidKeyException,
                               InvalidAlgorithmParameterException
        使用密钥和一组算法参数初始化此密码。

        根据opmode的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode

        如果此密码需要任何算法参数,并且params为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果正在初始化加密或密钥包装,并提出一个InvalidAlgorithmParameterException if正在为解密或密钥解包进行初始化。 生成的参数可以使用getParametersgetIV (如果参数为IV)检索。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),则将使用最高优先级安装的提供者的SecureRandom实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        key - 加密密钥
        params - 算法参数
        异常
        InvalidKeyException - 如果给定的密钥不适用于初始化此密码,或者其keysize超过最大允许密钥大小(从配置的管辖区策略文件确定)。
        InvalidAlgorithmParameterException - 如果给定的算法参数不适用于此密码,或者该密码需要算法参数,并且 params为空,或者给定的算法参数意味着超过合法限制的密码强度(由配置的管辖区策略文件确定)。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Key key,
                               AlgorithmParameterSpec params,
                               SecureRandom random)
                        throws InvalidKeyException,
                               InvalidAlgorithmParameterException
        使用密钥,一组算法参数和随机源初始化此密码。

        根据opmode的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode

        如果此密码需要任何算法参数,并且params为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密或密钥包装,并提出一个InvalidAlgorithmParameterException if正在为解密或密钥解包进行初始化。 可以使用getParametersgetIV (如果参数为IV)检索生成的参数。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从random获得。

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        key - 加密密钥
        params - 算法参数
        random - 随机性的来源
        异常
        InvalidKeyException - 如果给定的密钥不适合初始化此密码,或者其keysize超过了最大允许密钥大小(从配置的管辖区策略文件确定)。
        InvalidAlgorithmParameterException - 如果给定的算法参数不适合该密码,或者该密码需要算法参数,并且 params为空,或者给定的算法参数意味着超过合法限制(从配置的管辖区策略文件确定)的加密强度。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但是模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Key key,
                               AlgorithmParameters params)
                        throws InvalidKeyException,
                               InvalidAlgorithmParameterException
        使用密钥和一组算法参数初始化此密码。

        根据opmode的值,为以下四个操作之一初始化加密:加密,解密,密钥包装或密钥解opmode

        如果此密码需要任何算法参数,并且params为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果正在初始化加密或密钥包装,并提出一个InvalidAlgorithmParameterException if正在为解密或密钥解包进行初始化。 生成的参数可以使用getParametersgetIV (如果参数为IV)检索。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将使用最高优先级安装的提供商的SecureRandom实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        key - 加密密钥
        params - 算法参数
        异常
        InvalidKeyException - 如果给定的密钥不适合初始化此密码,或者其keysize超过允许的最大密钥大小(根据配置的管辖区策略文件确定)。
        InvalidAlgorithmParameterException - 如果给定的算法参数不适合该密码,或者该密码需要算法参数,并且 params为空,或者给定的算法参数意味着超过合法限制(从配置的管辖区策略文件确定)的加密强度。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但是模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Key key,
                               AlgorithmParameters params,
                               SecureRandom random)
                        throws InvalidKeyException,
                               InvalidAlgorithmParameterException
        使用密钥,一组算法参数和随机源初始化此密码。

        根据opmode的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode

        如果此密码需要任何算法参数,并且params为null,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密或密钥包装,并提出一个InvalidAlgorithmParameterException if正在为解密或密钥解包进行初始化。 可以使用getParametersgetIV (如果参数为IV)检索生成的参数。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从random获得。

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        key - 加密密钥
        params - 算法参数
        random - 随机性的来源
        异常
        InvalidKeyException - 如果给定的密钥不适合初始化此密码,或者其keysize超过了允许的最大密钥大小(从配置的管辖区策略文件中确定)。
        InvalidAlgorithmParameterException -如果给定的算法参数不适合此cipher,或此cipher要求使用算法参数和 params为空,或者给定的算法参数所含的加密强度将超过法律限制(由已配置的仲裁策略文件确定)。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但是模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Certificate certificate)
                        throws InvalidKeyException
        使用给定证书中的公钥初始化此密码。

        根据opmode的值,密码被初始化为以下四个操作之一:加密,解密,密钥包装或密钥解opmode

        如果证书是类型X.509,并且密钥使用扩展字段被标记为关键,并且密钥使用扩展字段的值意味着证书中的公钥及其相应的私钥不应被用于操作代表opmode的值,一个InvalidKeyException被抛出。

        如果该密码需要任何不能从给定证书中的公开密钥导出的算法参数,则底层密码实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密,密钥包装,并提出一个InvalidKeyException如果正在初始化解密或密钥解包。 可以使用getParametersgetIV (如果参数为IV)检索生成的参数。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),则将使用最高优先级安装的提供者的SecureRandom实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        certificate - 证书
        异常
        InvalidKeyException - 如果给定证书中的公钥不适合初始化该密码,或者该密码需要不能从给定证书中的公钥确定的算法参数,或给定证书中的公钥密钥大小具有密钥大小超过最大允许密钥大小(由配置的管辖区策略文件确定)。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但是模式不是由底层的 CipherSpi实现的。
      • init

        public final void init​(int opmode,
                               Certificate certificate,
                               SecureRandom random)
                        throws InvalidKeyException
        使用给定证书中的公钥和随机源初始化此密码。

        根据opmode的值,为以下四个操作之一初始化加密:加密,解密,密钥包装或密钥解opmode

        如果证书是类型X.509,并且密钥使用扩展字段被标记为关键,并且密钥使用扩展字段的值意味着证书中的公钥及其相应的私钥不应被用于操作由opmode ,抛出InvalidKeyException

        如果该密码需要在给定的certificate不能从公钥中导出的任何算法参数,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密,密钥包装,并提出一个InvalidKeyException如果它被初始化解密或密钥解包。 生成的参数可以使用getParametersgetIV (如果参数为IV)检索。

        如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。

        如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从random获得。

        请注意,当一个Cipher对象被初始化时,它将失去所有先前获取的状态。 换句话说,初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。

        参数
        opmode -此cipher的操作模式(这是下列之一: ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
        certificate - 证书
        random - 随机的来源
        异常
        InvalidKeyException - 如果给定证书中的公钥不适合初始化该密码,或者该密码需要不能根据给定证书中的公开密钥确定算法参数,或给定证书中公开密钥的keyize具有密钥长度超过最大允许密钥大小(由配置的管辖区策略文件确定)。
        UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE但模式不是由底层的 CipherSpi实现的。
      • update

        public final byte[] update​(byte[] input)
        继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。

        处理input缓冲区中的字节,结果存储在新的缓冲区中。

        如果input的长度为零,此方法返回null

        参数
        input - 输入缓冲区
        结果
        具有结果的新缓冲区,如果底层密码是块密码,并且输入数据太短,导致新的块,则为null。
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
      • update

        public final byte[] update​(byte[] input,
                                   int inputOffset,
                                   int inputLen)
        继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。

        第一inputLen字节在input缓冲区中,从inputOffset以下,被处理,并且结果被存储在新的缓冲器。

        如果inputLen为零,此方法返回null

        参数
        input - 输入缓冲区
        inputOffset - input中的输入开始的偏移量
        inputLen - 输入长度
        结果
        具有结果的新缓冲区,如果底层密码是块密码,并且输入数据太短,导致新的块,则为null。
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
      • update

        public final int update​(byte[] input,
                                int inputOffset,
                                int inputLen,
                                byte[] output)
                         throws ShortBufferException
        继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。

        第一inputLen字节在input缓冲区中,从inputOffset以下,被处理,并且结果被存储在output缓冲器。

        如果output缓冲区太小而不能保存结果,则抛出一个ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize确定输出缓冲区应该有多大。

        如果inputLen为零,则此方法返回零长度。

        注意:该方法应该是复制安全的,这意味着inputoutput缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。

        参数
        input - 输入缓冲区
        inputOffset - input中的输入开始的偏移量
        inputLen - 输入长度
        output - 结果的缓冲区
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        ShortBufferException - 如果给定的输出缓冲区太小,不能保存结果
      • update

        public final int update​(byte[] input,
                                int inputOffset,
                                int inputLen,
                                byte[] output,
                                int outputOffset)
                         throws ShortBufferException
        继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。

        第一inputLen字节在input缓冲区中,从inputOffset以下,被处理,并且结果被存储在output缓冲区中,从outputOffset以下。

        如果output缓冲区太小而不能保存结果,则抛出ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize来确定输出缓冲区应该有多大。

        如果inputLen为零,则此方法返回零长度。

        注意:该方法应该是安全的,这意味着inputoutput缓冲区可以引用相同的字节数组,并且当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。

        参数
        input - 输入缓冲区
        inputOffset - input中的输入开始的偏移量
        inputLen - 输入长度
        output - 结果的缓冲区
        outputOffset - output中存储结果的偏移量
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        ShortBufferException - 如果给定的输出缓冲区太小,不能保存结果
      • update

        public final int update​(ByteBuffer input,
                                ByteBuffer output)
                         throws ShortBufferException
        继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。

        所有input.remaining()起始字节input.position()被处理。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于其限制; 其限制将不会改变。 输出缓冲区的位置将提前n,其中n是此方法返回的值; 输出缓冲区的限制将不会改变。

        如果output.remaining()字节不足以保存结果,则抛出ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize来确定输出缓冲区应该有多大。

        注意:该方法应该是复制安全的,这意味着inputoutput缓冲区可以引用相同的内存块,并且当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。

        参数
        input - 输入ByteBuffer
        output - 输出ByteByffer
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalArgumentException - 如果输入和输出是相同的对象
        ReadOnlyBufferException - 输出缓冲区是否为只读
        ShortBufferException - 输出缓冲区空间不足的情况
        从以下版本开始:
        1.5
      • doFinal

        public final byte[] doFinal​()
                             throws IllegalBlockSizeException,
                                    BadPaddingException
        完成多部分加密或解密操作,这取决于该密码如何初始化。

        在以前的update操作中可能已经缓冲的输入数据被处理,并且应用填充(如果请求)。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在一个新的缓冲区。

        完成后,该方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        结果
        新的缓冲区结果
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalBlockSizeException - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        BadPaddingException - 如果该密码处于解密模式,并且已经请求了(un)填充,但是解密的数据不受适当的填充字节的限制
        AEADBadTagException - 如果该密码在AEAD模式(例如GCM / CCM)中解密,并且接收到的认证标签与计算值不匹配
      • doFinal

        public final int doFinal​(byte[] output,
                                 int outputOffset)
                          throws IllegalBlockSizeException,
                                 ShortBufferException,
                                 BadPaddingException
        完成多部分加密或解密操作,这取决于该密码如何初始化。

        在以前的update操作中可能已经缓冲的输入数据被处理,并且应用填充(如果请求)。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在output缓冲区中,从outputOffset开始。

        如果output缓冲区太小而不能保存结果,则抛出一个ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize确定输出缓冲区应该有多大。

        完成后,该方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        参数
        output - 结果的缓冲区
        outputOffset - output中存储结果的偏移量
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalBlockSizeException - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        ShortBufferException - 如果给定的输出缓冲区太小,不能保存结果
        BadPaddingException - 如果此密码处于解密模式,并且(un)填充已被请求,但是解密的数据不受适当的填充字节的限制
        AEADBadTagException - 如果该密码在AEAD模式(如GCM / CCM)中解密,并且接收的认证标签与计算值不匹配
      • doFinal

        public final byte[] doFinal​(byte[] input)
                             throws IllegalBlockSizeException,
                                    BadPaddingException
        在单一部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,这取决于这个密码如何初始化。

        input缓冲区中的字节以及在以前的update操作中可能已缓冲的任何输入字节都将被处理,并应用填充(如果请求)。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在一个新的缓冲区。

        完成后,该方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        参数
        input - 输入缓冲区
        结果
        新的缓冲区结果
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalBlockSizeException - 如果此密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        BadPaddingException - 如果该密码处于解密模式,并且已经请求了(un)填充,但是解密的数据不受适当的填充字节的限制
        AEADBadTagException - 如果该密码在AEAD模式(如GCM / CCM)中解密,并且接收的认证标签与计算值不匹配
      • doFinal

        public final byte[] doFinal​(byte[] input,
                                    int inputOffset,
                                    int inputLen)
                             throws IllegalBlockSizeException,
                                    BadPaddingException
        在单一部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,这取决于这个密码如何初始化。

        第一inputLen字节在input缓冲区中,从inputOffset以下,并且可能在上一次期间已缓存的任何输入字节update操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在一个新的缓冲区。

        完成后,该方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        参数
        input - 输入缓冲区
        inputOffset - input中的输入开始的偏移量
        inputLen - 输入长度
        结果
        新的缓冲区结果
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalBlockSizeException - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        BadPaddingException - 如果此密码处于解密模式,并且(un)填充已被请求,但解密的数据不受适当的填充字节的约束
        AEADBadTagException - 如果该密码在AEAD模式(如GCM / CCM)中解密,并且接收的认证标签与计算值不匹配
      • doFinal

        public final int doFinal​(byte[] input,
                                 int inputOffset,
                                 int inputLen,
                                 byte[] output)
                          throws ShortBufferException,
                                 IllegalBlockSizeException,
                                 BadPaddingException
        在单一部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,这取决于这个密码如何初始化。

        第一inputLen字节在input缓冲区中,从inputOffset以下,并且可能在上一次期间已缓存的任何输入字节update操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在output缓冲区中。

        如果output缓冲区太小而不能保存结果,则抛出一个ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize来确定输出缓冲区应该有多大。

        完成后,此方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        注意:该方法应该是复制安全的,这意味着inputoutput缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。

        参数
        input - 输入缓冲区
        inputOffset - input中的输入开始的偏移量
        inputLen - 输入长度
        output - 结果的缓冲区
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalBlockSizeException - 如果此密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        ShortBufferException - 如果给定的输出缓冲区太小,不能保存结果
        BadPaddingException - 如果此密码处于解密模式,并且(un)填充已被请求,但解密的数据不受适当的填充字节的限制
        AEADBadTagException - 如果该密码在AEAD模式(例如GCM / CCM)中解密,并且接收的认证标签与计算值不匹配
      • doFinal

        public final int doFinal​(byte[] input,
                                 int inputOffset,
                                 int inputLen,
                                 byte[] output,
                                 int outputOffset)
                          throws ShortBufferException,
                                 IllegalBlockSizeException,
                                 BadPaddingException
        在单一部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,这取决于这个密码如何初始化。

        第一inputLen字节在input缓冲区中,从inputOffset以下,并且可能在上一次期间已缓存的任何输入字节update操作,进行处理,填充(如果要求)被施加。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在output缓冲区中,从outputOffset开始。

        如果output缓冲区太小而不能保存结果,则抛出一个ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize确定输出缓冲区应该有多大。

        完成后,此方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        注意:该方法应该是安全的,这意味着inputoutput缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。

        参数
        input - 输入缓冲区
        inputOffset - input中的输入开始的偏移量
        inputLen - 输入长度
        output - 结果的缓冲区
        outputOffset - output中存储结果的偏移量
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalBlockSizeException - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        ShortBufferException - 如果给定的输出缓冲区太小,不能保存结果
        BadPaddingException - 如果该密码处于解密模式,并且已经请求了(un)填充,但解密的数据不受适当的填充字节的限制
        AEADBadTagException - 如果该密码在AEAD模式(如GCM / CCM)中解密,并且接收的认证标签与计算值不匹配
      • doFinal

        public final int doFinal​(ByteBuffer input,
                                 ByteBuffer output)
                          throws ShortBufferException,
                                 IllegalBlockSizeException,
                                 BadPaddingException
        在单一部分操作中加密或解密数据,或完成多部分操作。 数据被加密或解密,这取决于这个密码如何初始化。

        所有input.remaining()起始字节input.position()被处理。 如果正在使用诸如GCM / CCM的AEAD模式,则在加密的情况下附加认证标签,或者在解密的情况下验证认证标签。 结果存储在输出缓冲区中。 返回时,输入缓冲区的位置将等于其限制; 其限制将不会改变。 输出缓冲区的位置将提前n,其中n是此方法返回的值; 输出缓冲区的限制将不会改变。

        如果output.remaining()字节不足以保存结果,则抛出ShortBufferException 在这种情况下,使用较大的输出缓冲区重复此呼叫。 使用getOutputSize来确定输出缓冲区应该有多大。

        完成后,此方法将此密码对象重置为先前通过调用init初始化的状态。 也就是说,对象被重置并可用于加密或解密(取决于在调用init指定的操作模式)更多的数据。

        注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。

        注意:该方法应该是安全的,这意味着inputoutput缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。

        参数
        input - 输入ByteBuffer
        output - 输出ByteBuffer
        结果
        output存储的字节数
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)
        IllegalArgumentException - 如果输入和输出是相同的对象
        ReadOnlyBufferException - 输出缓冲区是否为只读
        IllegalBlockSizeException - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数; 或者如果此加密算法无法处理提供的输入数据。
        ShortBufferException - 输出缓冲区空间不足
        BadPaddingException - 如果该密码处于解密模式,并且已经请求了(un)填充,但是解密的数据不受适当的填充字节的限制
        AEADBadTagException - 如果该密码在AEAD模式(例如GCM / CCM)中解密,并且接收到的认证标签与计算值不匹配
        从以下版本开始:
        1.5
      • unwrap

        public final Key unwrap​(byte[] wrappedKey,
                                String wrappedKeyAlgorithm,
                                int wrappedKeyType)
                         throws InvalidKeyException,
                                NoSuchAlgorithmException
        打开以前包装的钥匙。
        参数
        wrappedKey - 要解开的关键。
        wrappedKeyAlgorithm - 与包裹密钥相关联的算法。
        wrappedKeyType - 包装密钥的类型。 这必须是一个SECRET_KEYPRIVATE_KEY ,或PUBLIC_KEY
        结果
        展开的钥匙。
        异常
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化)。
        NoSuchAlgorithmException - 如果没有安装的提供商可以为 wrappedKeyType创建类型为 wrappedKeyTypewrappedKeyAlgorithm
        InvalidKeyException - 如果 wrappedKey不表示 wrappedKeyTypewrappedKeyAlgorithm类型的打包密钥。
        UnsupportedOperationException - 如果不支持 CipherSpi的相应方法。
      • getMaxAllowedKeyLength

        public static final int getMaxAllowedKeyLength​(String transformation)
                                                throws NoSuchAlgorithmException
        根据已安装的JCE管辖区策略文件,返回指定转换的最大密钥长度。 如果安装JCE无限制权限策略文件,则返回Integer.MAX_VALUE。 有关默认密钥大小和JCE管辖区策略文件的更多信息,请参阅JDK Providers Documentation中的加密默认值和限制。
        参数
        transformation - 密码转换。
        结果
        最大密钥长度,以位或Integer.MAX_VALUE为单位。
        异常
        NullPointerException - 如果 transformation为空。
        NoSuchAlgorithmException - 如果 transformation不是有效的转换,即以“算法”或“算法/模式/填充”的形式。
        从以下版本开始:
        1.5
      • getMaxAllowedParameterSpec

        public static final AlgorithmParameterSpec getMaxAllowedParameterSpec​(String transformation)
                                                                       throws NoSuchAlgorithmException
        返回一个AlgorithmParameterSpec对象,该对象包含根据管辖区策略文件的最大密码参数值。 如果安装了JCE无限制权限策略文件,或策略文件中指定转换的参数没有最大限制,则返回null。
        参数
        transformation - 密码转换。
        结果
        一个保存最大值的AlgorithmParameterSpec或null。
        异常
        NullPointerException - 如果 transformation为空。
        NoSuchAlgorithmException - 如果 transformation不是有效的转换,即以“算法”或“算法/模式/填充”的形式。
        从以下版本开始:
        1.5
      • updateAAD

        public final void updateAAD​(byte[] src)
        继续进行附加认证数据(AAD)的多部分更新。

        当使用AEAD(GCM / CCM)等模式运行时,调用此方法可以为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在密文开始操作之前(通过updatedoFinal方法)提供所有AAD。

        参数
        src - 包含其他认证数据的缓冲区
        异常
        IllegalArgumentException - 如果 src字节数组为空
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化),则不接受AAD,或者如果在GCM或CCM模式下运行,并且 update方法之一已被调用用于主动加密/解密操作
        UnsupportedOperationException -如果在相应的方法 CipherSpi尚未覆盖的实现
        从以下版本开始:
        1.7
      • updateAAD

        public final void updateAAD​(byte[] src,
                                    int offset,
                                    int len)
        使用所提供的缓冲区的子集,继续进行附加认证数据(AAD)的多部分更新。

        当使用AEAD(GCM / CCM)等模式运行时,调用此方法可以为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在密文开始操作之前(通过updatedoFinal方法)提供所有AAD。

        参数
        src - 包含AAD的缓冲区
        offset - 其中AAD输入开始的 src中的偏移量
        len - AAD字节数
        异常
        IllegalArgumentException - 如果 src字节数组为空,或 offsetlength小于0,或 offsetlen的总和大于 src字节数组的长度
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化),则不接受AAD,或者以GCM或CCM模式运行,并且已经为 update方法之一调用了主动加密/解密操作
        UnsupportedOperationException -如果在相应的方法 CipherSpi尚未覆盖的实现
        从以下版本开始:
        1.7
      • updateAAD

        public final void updateAAD​(ByteBuffer src)
        继续进行附加认证数据(AAD)的多部分更新。

        当使用AEAD(GCM / CCM)等模式运行时,调用此方法可以为密码提供AAD。 如果此密码在GCM或CCM模式下运行,则必须在密文开始操作之前(通过updatedoFinal方法)提供所有AAD。

        所有src.remaining()起始字节src.position()被处理。 返回时,输入缓冲区的位置将等于其限制; 其限制将不会改变。

        参数
        src - 包含AAD的缓冲区
        异常
        IllegalArgumentException - 如果 src ByteBuffer为空
        IllegalStateException - 如果此密码处于错误状态(例如,尚未初始化),则不接受AAD,或者如果在GCM或CCM模式下运行,并且已经为 update方法之一调用了主动加密/解密操作
        UnsupportedOperationException -如果在相应的方法 CipherSpi尚未覆盖的实现
        从以下版本开始:
        1.7