模块 java.base

类 Cipher

java.lang.Object
javax.crypto.Cipher
已知子类:
NullCipher

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

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

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

转换具有以下形式:

  • "算法/模式/填充“ 或者
  • "算法"

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

   Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
 
使用 CFBOFB 等模式,块密码可以以小于密码的实际块大小的单位加密数据。当请求这种模式时,您可以选择指定一次要处理的位数,方法是将此数字附加到模式名称,如“AES/CFB8/NoPadding”和“AES/OFB32/PKCS5Padding”转换中所示。如果没有指定这样的数字,则使用特定于提供者的默认值。 (有关 JDK 提供程序的默认值,请参阅 JDK 供应商文档。)因此,可以使用 8 位模式(例如 CFB8 或 OFB8)将块密码转换为面向字节的流密码。

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

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

请注意,GCM 模式对使用给定密钥进行加密的 IV 有唯一性要求。当 IV 重复用于 GCM 加密时,此类用法容易受到伪造攻击。因此,在每次使用 GCM 模式进行加密操作后,调用者应使用具有不同 IV 值的 GCM 参数重新初始化 Cipher 对象。

   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);
   ...

 
ChaCha20 和 ChaCha20-Poly1305 算法对具有给定密钥的唯一随机数有类似的要求。每次加密或解密操作后,调用者应使用指定不同随机数值的参数重新初始化其 ChaCha20 或 ChaCha20-Poly1305 密码。有关 ChaCha20 和 ChaCha20-Poly1305 算法的更多信息,请参阅 RFC 7539

Java 平台的每个实现都需要支持以下标准的 Cipher 对象转换,键大小在括号中:

  • AES/CBC/NoPadding (128)
  • AES/CBC/PKCS5Padding (128)
  • AES/ECB/NoPadding (128)
  • AES/ECB/PKCS5Padding (128)
  • AES/GCM/NoPadding (128)
  • DESede/CBC/NoPadding (168)
  • DESede/CBC/PKCS5Padding (168)
  • DESede/ECB/NoPadding (168)
  • DESede/ECB/PKCS5Padding (168)
  • RSA/ECB/PKCS1Padding (1024, 2048)
  • RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
  • RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
这些转换在 Java 安全标准算法名称规范的 密码部分 中进行了描述。请查阅您的实施的发布文档以查看是否支持任何其他转换。
自从:
1.4
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    static final int
    用于将密码初始化为解密模式的常量。
    static final int
    用于将密码初始化为加密模式的常量。
    static final int
    常量用来表示待解包的密钥是“私钥”。
    static final int
    用于指示待解包密钥的常量是“公钥”。
    static final int
    用于指示待解包密钥的常量是“秘密密钥”。
    static final int
    用于将密码初始化为密钥解包模式的常量。
    static final int
    用于将密码初始化为密钥包装模式的常量。
  • 构造方法总结

    构造方法
    修饰符
    构造方法
    描述
    protected
    Cipher(CipherSpi cipherSpi, Provider provider, String transformation)
    创建一个 Cipher 对象.
  • 方法总结

    修饰符和类型
    方法
    描述
    final byte[]
    完成多部分加密或解密操作,具体取决于此 Cipher 对象的初始化方式。
    final byte[]
    doFinal(byte[] input)
    在单部分操作中加密或解密数据,或完成多部分操作。
    final int
    doFinal(byte[] output, int outputOffset)
    完成多部分加密或解密操作,具体取决于此 Cipher 对象的初始化方式。
    final byte[]
    doFinal(byte[] input, int inputOffset, int inputLen)
    在单部分操作中加密或解密数据,或完成多部分操作。
    final int
    doFinal(byte[] input, int inputOffset, int inputLen, byte[] output)
    在单部分操作中加密或解密数据,或完成多部分操作。
    final int
    doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
    在单部分操作中加密或解密数据,或完成多部分操作。
    final int
    doFinal(ByteBuffer input, ByteBuffer output)
    在单部分操作中加密或解密数据,或完成多部分操作。
    final String
    返回此 Cipher 对象的算法名称。
    final int
    返回块大小(以字节为单位)。
    返回与此 Cipher 对象一起使用的豁免机制对象。
    static final Cipher
    getInstance(String transformation)
    返回一个实现指定转换的 Cipher 对象。
    static final Cipher
    getInstance(String transformation, String provider)
    返回一个实现指定转换的 Cipher 对象。
    static final Cipher
    getInstance(String transformation, Provider provider)
    返回一个实现指定转换的 Cipher 对象。
    final byte[]
    返回新缓冲区中的初始化向量 (IV)。
    static final int
    getMaxAllowedKeyLength(String transformation)
    根据已安装的 JCE 权限策略文件返回指定转换的最大密钥长度。
    返回一个 {code AlgorithmParameterSpec} 对象,其中包含根据管辖策略文件的最大 Cipher 参数值。
    final int
    getOutputSize(int inputLen)
    给定输入长度 inputLen(以字节为单位),返回输出缓冲区为了保存下一个 updatedoFinal 操作的结果所需的字节长度。
    返回与此 Cipher 对象一起使用的参数。
    final Provider
    返回此 Cipher 对象的提供者。
    final void
    init(int opmode, Certificate certificate)
    使用给定证书中的公钥初始化此 Cipher 对象。
    final void
    init(int opmode, Certificate certificate, SecureRandom random)
    使用来自给定证书的公钥和随机源初始化此 Cipher 对象。
    final void
    init(int opmode, Key key)
    使用键初始化此 Cipher 对象。
    final void
    init(int opmode, Key key, AlgorithmParameters params)
    使用密钥和一组算法参数初始化此 Cipher 对象。
    final void
    init(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
    使用密钥、一组算法参数和随机源初始化此 Cipher 对象。
    final void
    init(int opmode, Key key, SecureRandom random)
    使用密钥和随机源初始化此 Cipher 对象。
    final void
    init(int opmode, Key key, AlgorithmParameterSpec params)
    使用密钥和一组算法参数初始化此 Cipher 对象。
    final void
    init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
    使用密钥、一组算法参数和随机源初始化此 Cipher 对象。
    返回此 Cipher 对象的 String 表示。
    final Key
    unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
    打开先前包装的密钥。
    final byte[]
    update(byte[] input)
    继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。
    final byte[]
    update(byte[] input, int inputOffset, int inputLen)
    继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。
    final int
    update(byte[] input, int inputOffset, int inputLen, byte[] output)
    继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。
    final int
    update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
    继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。
    final int
    update(ByteBuffer input, ByteBuffer output)
    继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。
    final void
    updateAAD(byte[] src)
    继续附加身份验证数据 (AAD) 的多部分更新。
    final void
    updateAAD(byte[] src, int offset, int len)
    使用提供的缓冲区的子集继续附加身份验证数据 (AAD) 的多部分更新。
    final void
    继续附加身份验证数据 (AAD) 的多部分更新。
    final byte[]
    wrap(Key key)
    包裹一把钥匙。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • 字段详细信息

    • ENCRYPT_MODE

      public static final int ENCRYPT_MODE
      用于将密码初始化为加密模式的常量。
      参见:
    • DECRYPT_MODE

      public static final int DECRYPT_MODE
      用于将密码初始化为解密模式的常量。
      参见:
    • WRAP_MODE

      public static final int WRAP_MODE
      用于将密码初始化为密钥包装模式的常量。
      参见:
    • UNWRAP_MODE

      public static final int UNWRAP_MODE
      用于将密码初始化为密钥解包模式的常量。
      参见:
    • PUBLIC_KEY

      public static final int PUBLIC_KEY
      用于指示待解包密钥的常量是“公钥”。
      参见:
    • PRIVATE_KEY

      public static final int PRIVATE_KEY
      常量用来表示待解包的密钥是“私钥”。
      参见:
    • SECRET_KEY

      public static final int SECRET_KEY
      用于指示待解包密钥的常量是“秘密密钥”。
      参见:
  • 构造方法详细信息

    • Cipher

      protected Cipher(CipherSpi  cipherSpi, Provider  provider, String  transformation)
      创建一个 Cipher 对象.
      参数:
      cipherSpi - 代表
      provider - 供应商
      transformation - 转型
      抛出:
      NullPointerException - 如果 providernull
      IllegalArgumentException - 如果提供的参数被认为对构造 Cipher 对象无效
  • 方法详情

    • getInstance

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

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

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

      API 注意:
      建议使用完全指定算法、模式和填充的转换。如果不这样做,提供商将使用默认的模式和填充,这可能不符合您应用程序的安全要求。
      实现注意事项:
      JDK 参考实现还使用 jdk.security.provider.preferred Security 属性来确定指定算法的首选提供程序顺序。这可能与 Security.getProviders() 返回的提供商顺序不同。有关 JDK 提供程序使用的转换默认值的信息,另请参阅 JDK 供应商 文档的密码转换部分。
      参数:
      transformation - 转换的名称,例如,AES/CBC/PKCS5填充.有关标准转换名称的信息,请参阅 Java 安全标准算法名称规范 中的密码部分。
      返回:
      实现请求转换的 Cipher 对象
      抛出:
      NoSuchAlgorithmException - 如果 transformationnull ,为空,格式无效,或者没有提供者支持指定算法的 CipherSpi 实现
      NoSuchPaddingException - 如果 transformation 包含不可用的填充方案
      参见:
    • getInstance

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

      返回一个新的 Cipher 对象,其中封装了来自指定提供者的 CipherSpi 实现。指定的提供者必须在安全提供者列表中注册。

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

      API 注意:
      建议使用完全指定算法、模式和填充的转换。如果不这样做,提供商将使用默认的模式和填充,这可能不符合您应用程序的安全要求。
      实现注意事项:
      有关 JDK 提供程序使用的转换默认值的信息,请参阅 JDK 供应商 文档的密码转换部分。
      参数:
      transformation - 转换的名称,例如,AES/CBC/PKCS5填充.有关标准转换名称的信息,请参阅 Java 安全标准算法名称规范 中的密码部分。
      provider - 提供商的名称
      返回:
      实现请求转换的 Cipher 对象
      抛出:
      IllegalArgumentException - 如果 providernull 或为空
      NoSuchAlgorithmException - 如果 transformationnull 、空的、格式无效,或者如果指定算法的 CipherSpi 实现不能从指定的提供商处获得
      NoSuchPaddingException - 如果 transformation 包含不可用的填充方案
      NoSuchProviderException - 如果指定的提供者没有在安全提供者列表中注册
      参见:
    • getInstance

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

      返回一个新的 Cipher 对象,该对象封装了来自指定 provider 对象的 CipherSpi 实现。请注意,指定的 provider 对象不必在提供者列表中注册。

      API 注意:
      建议使用完全指定算法、模式和填充的转换。如果不这样做,提供商将使用默认的模式和填充,这可能不符合您应用程序的安全要求。
      实现注意事项:
      有关 JDK 提供程序使用的转换默认值的信息,请参阅 JDK 供应商 文档的密码转换部分。
      参数:
      transformation - 转换的名称,例如,AES/CBC/PKCS5填充.有关标准转换名称的信息,请参阅 Java 安全标准算法名称规范 中的密码部分。
      provider - 供应商
      返回:
      实现请求转换的 Cipher 对象
      抛出:
      IllegalArgumentException - 如果 providernull
      NoSuchAlgorithmException - 如果 transformationnull、空、格式无效,或者指定算法的 CipherSpi 实现无法从指定的 provider 对象获得
      NoSuchPaddingException - 如果 transformation 包含不可用的填充方案
      参见:
    • 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 - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
    • getIV

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

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

      返回:
      新缓冲区中的初始化向量,或者 null 如果此密码不使用 IV,或者 IV 尚未设置。
    • getParameters

      public final AlgorithmParameters  getParameters()
      返回与此 Cipher 对象一起使用的参数。

      返回的参数可能与用于初始化此密码的参数相同,或者可能包含底层密码实现使用的其他默认或随机参数值。如果未提供所需的参数并且可以由密码生成,则返回生成的参数。否则,返回 null

      返回:
      与此密码一起使用的参数,或 null
    • getExemptionMechanism

      public final ExemptionMechanism  getExemptionMechanism()
      返回与此 Cipher 对象一起使用的豁免机制对象。
      返回:
      与此 Cipher 对象一起使用的豁免机制对象,或者 null 如果此 Cipher 对象不使用任何豁免机制。
    • init

      public final void init(int opmode, Key  key) throws InvalidKeyException
      使用键初始化此 Cipher 对象。

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

      如果此密码需要任何无法从给定的 key 派生的算法参数,则底层密码实现应该自行生成所需的参数(使用特定于提供者的默认值或随机值),如果它正在为加密或密钥包装进行初始化,并且如果正在初始化解密或密钥解包,则引发 InvalidKeyException。可以使用 getParameters getIV 检索生成的参数(如果参数是 IV)。

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      key - 钥匙
      抛出:
      InvalidKeyException - 如果给定密钥不适合初始化此密码,或需要无法从给定密钥确定的算法参数,或者如果给定密钥的密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

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

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

      如果此密码需要任何无法从给定的 key 派生的算法参数,则底层密码实现应该自行生成所需的参数(使用特定于提供者的默认值或随机值),如果它正在为加密或密钥包装进行初始化,并且如果正在初始化解密或密钥解包,则引发 InvalidKeyException。可以使用 getParameters getIV 检索生成的参数(如果参数是 IV)。

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      key - 加密密钥
      random - 随机源
      抛出:
      InvalidKeyException - 如果给定密钥不适合初始化此密码,或需要无法从给定密钥确定的算法参数,或者如果给定密钥的密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

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

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

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

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      key - 加密密钥
      params - 算法参数
      抛出:
      InvalidKeyException - 如果给定密钥不适合初始化此密码,或者其密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      InvalidAlgorithmParameterException - 如果给定的算法参数不适合此密码,或者此密码需要算法参数并且 paramsnull ,或者给定的算法参数暗示密码强度将超过法定限制(根据配置的管辖策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

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

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

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

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      key - 加密密钥
      params - 算法参数
      random - 随机源
      抛出:
      InvalidKeyException - 如果给定密钥不适合初始化此密码,或者其密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      InvalidAlgorithmParameterException - 如果给定的算法参数不适合此密码,或者此密码需要算法参数并且 paramsnull ,或者给定的算法参数暗示密码强度将超过法定限制(根据配置的管辖策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

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

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

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

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      key - 加密密钥
      params - 算法参数
      抛出:
      InvalidKeyException - 如果给定密钥不适合初始化此密码,或者其密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)。
      InvalidAlgorithmParameterException - 如果给定的算法参数不适合此密码,或者此密码需要算法参数并且 paramsnull ,或者给定的算法参数暗示密码强度将超过法定限制(根据配置的管辖策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

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

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

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

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      key - 加密密钥
      params - 算法参数
      random - 随机源
      抛出:
      InvalidKeyException - 如果给定密钥不适合初始化此密码,或者其密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      InvalidAlgorithmParameterException - 如果给定的算法参数不适合此密码,或者此密码需要算法参数并且 paramsnull ,或者给定的算法参数暗示密码强度将超过法定限制(根据配置的管辖策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

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

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

      如果证书的类型为 X.509 并且具有关键用法标记为关键的扩展字段,以及关键用法扩展字段意味着证书中的公钥及其对应的私钥不应该用于 opmode 值表示的操作,抛出 InvalidKeyException

      如果此密码需要任何无法从给定证书中的公钥派生的算法参数,则底层密码实现应该在初始化加密时自行生成所需的参数(使用特定于提供者的默认值或随机值)或密钥包装,如果正在初始化解密或密钥解包,则引发 InvalidKeyException。可以使用 getParameters getIV 检索生成的参数(如果参数是 IV)。

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      certificate - 证书
      抛出:
      InvalidKeyException - 如果给定证书中的公钥不适合初始化此密码,或者此密码需要无法从给定证书中的公钥确定的算法参数,或者给定证书中公钥的密钥大小有一个密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • init

      public final void init(int opmode, Certificate  certificate, SecureRandom  random) throws InvalidKeyException
      使用来自给定证书的公钥和随机源初始化此 Cipher 对象。

      Cipher 对象针对以下四种操作之一进行初始化:加密、解密、密钥包装或密钥解包装,具体取决于 opmode 的值。

      如果证书的类型为 X.509 并且具有关键用法标记为关键的扩展字段,以及关键用法扩展字段意味着证书中的公钥及其对应的私钥不应该用于 opmode 值表示的操作,抛出 InvalidKeyException

      如果此密码需要任何无法从给定 certificate 中的公钥派生的算法参数,则底层密码实现应该在初始化加密时自行生成所需的参数(使用特定于提供者的默认值或随机值)或密钥包装,如果正在初始化解密或密钥解包,则引发 InvalidKeyException。可以使用 getParameters getIV 检索生成的参数(如果参数是 IV)。

      如果此密码需要无法从输入参数派生的算法参数,并且没有合理的特定于提供者的默认值,则初始化必然会失败。

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

      请注意,当 Cipher 对象被初始化时,它会丢失所有先前获得的状态。换句话说,初始化 Cipher 对象等同于创建该 Cipher 对象的新实例并对其进行初始化。

      参数:
      opmode - 此 Cipher 对象的操作模式(这是以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
      certificate - 证书
      random - 随机源
      抛出:
      InvalidKeyException - 如果给定证书中的公钥不适合初始化此密码,或者此密码需要无法从给定证书中的公钥确定的算法参数,或者给定证书中公钥的密钥大小有一个密钥大小超过最大允许密钥大小(由配置的权限策略文件确定)
      UnsupportedOperationException - 如果 opmodeWRAP_MODEUNWRAP_MODE 但该模式未由底层 CipherSpi 实现
      InvalidParameterException - 如果 opmode 不是公认的值之一
    • update

      public final byte[] update(byte[] input)
      继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。

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

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

      参数:
      input - 输入缓冲区
      返回:
      带有结果的新缓冲区,或者 null 如果此密码是块密码并且输入数据太短而无法生成新块
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
    • update

      public final byte[] update(byte[] input, int inputOffset, int inputLen)
      继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。

      处理 input 缓冲区中的前 inputLen 个字节(从 inputOffset 开始),并将结果存储在新缓冲区中。

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

      参数:
      input - 输入缓冲区
      inputOffset - input 中输入开始的偏移量
      inputLen - 输入长度
      返回:
      带有结果的新缓冲区,或者 null 如果此密码是块密码并且输入数据太短而无法生成新块。
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
    • update

      public final int update(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException
      继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。

      处理 input 缓冲区中的前 inputLen 个字节(从 inputOffset 开始),并将结果存储在 output 缓冲区中。

      如果 output 缓冲区太小而无法保存结果,则会抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

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

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

      参数:
      input - 输入缓冲区
      inputOffset - input 中输入开始的偏移量
      inputLen - 输入长度
      output - 结果的缓冲区
      返回:
      output 中存储的字节数
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      ShortBufferException - 如果给定的输出缓冲区太小而无法保存结果
    • update

      public final int update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException
      继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。

      处理 input 缓冲区中从 inputOffset 开始的前 inputLen 个字节,并将结果存储在 output 缓冲区中,从 outputOffset 开始。

      如果 output 缓冲区太小而无法保存结果,则会抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

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

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

      参数:
      input - 输入缓冲区
      inputOffset - input 中输入开始的偏移量
      inputLen - 输入长度
      output - 结果的缓冲区
      outputOffset - output 中存储结果的偏移量
      返回:
      output 中存储的字节数
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      ShortBufferException - 如果给定的输出缓冲区太小而无法保存结果
    • update

      public final int update(ByteBuffer  input, ByteBuffer  output) throws ShortBufferException
      继续多部分加密或解密操作(取决于此 Cipher 对象的初始化方式),处理另一个数据部分。

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

      如果 output.remaining() 字节不足以保存结果,则抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

      注意:此方法应该是复制安全的,这意味着 inputoutput 缓冲区可以引用同一块内存,并且在将结果复制到输出缓冲区时不会覆盖未处理的输入数据。

      参数:
      input - 输入字节缓冲区
      output - 输出 ByteByffer
      返回:
      output 中存储的字节数
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      IllegalArgumentException - 如果输入和输出是同一个对象
      ReadOnlyBufferException - 如果输出缓冲区是只读的
      ShortBufferException - 如果输出缓冲区空间不足
      自从:
      1.5
    • doFinal

      public final byte[] doFinal() throws IllegalBlockSizeException , BadPaddingException
      完成多部分加密或解密操作,具体取决于此 Cipher 对象的初始化方式。

      输入数据可能在之前的 update 操作期间被缓冲,并应用填充(如果需要)。如果使用GCM/CCM等AEAD模式,加密时附加认证标签,解密时验证。结果存储在一个新的缓冲区中。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

      返回:
      带有结果的新缓冲区
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      IllegalBlockSizeException - 如果此密码是块密码,则没有请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数;或者如果此加密算法无法处理提供的输入数据。
      BadPaddingException - 如果此 Cipher 对象处于解密模式,并且已请求(未)填充,但解密数据不受适当填充字节的限制
      AEADBadTagException - 如果此 Cipher 对象正在 AEAD 模式(例如 GCM/CCM)中解密,并且接收到的身份验证标签与计算值不匹配
    • doFinal

      public final int doFinal(byte[] output, int outputOffset) throws IllegalBlockSizeException , ShortBufferException , BadPaddingException
      完成多部分加密或解密操作,具体取决于此 Cipher 对象的初始化方式。

      输入数据可能在之前的 update 操作期间被缓冲,并应用填充(如果需要)。如果使用GCM/CCM等AEAD模式,加密时附加认证标签,解密时验证。结果存储在 output 缓冲区中,从 outputOffset 开始(含)。

      如果 output 缓冲区太小而无法保存结果,则会抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

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

      public final byte[] doFinal(byte[] input) throws IllegalBlockSizeException , BadPaddingException
      在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,具体取决于此 Cipher 对象的初始化方式。

      处理 input 缓冲区中的字节,以及可能在之前的 update 操作期间缓冲的任何输入字节,并应用填充(如果需要)。如果使用GCM/CCM等AEAD模式,加密时附加认证标签,解密时验证。结果存储在一个新的缓冲区中。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

      参数:
      input - 输入缓冲区
      返回:
      带有结果的新缓冲区
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      IllegalBlockSizeException - 如果此密码是块密码,则没有请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数;或者如果此加密算法无法处理提供的输入数据。
      BadPaddingException - 如果此 Cipher 对象处于解密模式,并且已请求(未)填充,但解密数据不受适当填充字节的限制
      AEADBadTagException - 如果此 Cipher 对象正在 AEAD 模式(例如 GCM/CCM)中解密,并且接收到的身份验证标签与计算值不匹配
    • doFinal

      public final byte[] doFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException , BadPaddingException
      在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,具体取决于此 Cipher 对象的初始化方式。

      input 缓冲区中的第一个 inputLen 字节,从 inputOffset 开始,包括在之前的 update 操作期间可能已经缓冲的任何输入字节,被处理,并应用填充(如果请求)。如果使用GCM/CCM等AEAD模式,加密时附加认证标签,解密时验证。结果存储在一个新的缓冲区中。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

      参数:
      input - 输入缓冲区
      inputOffset - input 中输入开始的偏移量
      inputLen - 输入长度
      返回:
      带有结果的新缓冲区
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      IllegalBlockSizeException - 如果此密码是块密码,则没有请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数;或者如果此加密算法无法处理提供的输入数据。
      BadPaddingException - 如果此 Cipher 对象处于解密模式,并且已请求(未)填充,但解密数据不受适当填充字节的限制
      AEADBadTagException - 如果此 Cipher 对象正在 AEAD 模式(例如 GCM/CCM)中解密,并且接收到的身份验证标签与计算值不匹配
    • doFinal

      public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException , IllegalBlockSizeException , BadPaddingException
      在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,具体取决于此 Cipher 对象的初始化方式。

      input 缓冲区中的第一个 inputLen 字节,从 inputOffset 开始,包括在之前的 update 操作期间可能已经缓冲的任何输入字节,被处理,并应用填充(如果请求)。如果使用GCM/CCM等AEAD模式,加密时附加认证标签,解密时验证。结果存储在 output 缓冲区中。

      如果 output 缓冲区太小而无法保存结果,则会抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

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

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

      public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException , IllegalBlockSizeException , BadPaddingException
      在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,具体取决于此 Cipher 对象的初始化方式。

      input 缓冲区中的第一个 inputLen 字节,从 inputOffset 开始,包括在之前的 update 操作期间可能已经缓冲的任何输入字节,被处理,并应用填充(如果请求)。如果使用GCM/CCM等AEAD模式,加密时附加认证标签,解密时验证。结果存储在 output 缓冲区中,从 outputOffset 开始(含)。

      如果 output 缓冲区太小而无法保存结果,则会抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

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

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

      public final int doFinal(ByteBuffer  input, ByteBuffer  output) throws ShortBufferException , IllegalBlockSizeException , BadPaddingException
      在单部分操作中加密或解密数据,或完成多部分操作。数据被加密或解密,具体取决于此 Cipher 对象的初始化方式。

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

      如果 output.remaining() 字节不足以保存结果,则抛出 ShortBufferException。在这种情况下,使用更大的输出缓冲区重复此调用。使用 getOutputSize 确定输出缓冲区的大小。

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

      注意:如果抛出任何异常,这个Cipher对象可能需要重置才能再次使用。

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

      参数:
      input - 输入字节缓冲区
      output - 输出字节缓冲区
      返回:
      output 中存储的字节数
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      IllegalArgumentException - 如果输入和输出是同一个对象
      ReadOnlyBufferException - 如果输出缓冲区是只读的
      IllegalBlockSizeException - 如果此密码是块密码,则没有请求填充(仅在加密模式下),并且此密码处理的数据的总输入长度不是块大小的倍数;或者如果此加密算法无法处理提供的输入数据。
      ShortBufferException - 如果输出缓冲区空间不足
      BadPaddingException - 如果此 Cipher 对象处于解密模式,并且已请求(未)填充,但解密数据不受适当填充字节的限制
      AEADBadTagException - 如果此 Cipher 对象正在 AEAD 模式(例如 GCM/CCM)中解密,并且接收到的身份验证标签与计算值不匹配
      自从:
      1.5
    • wrap

      public final byte[] wrap(Key  key) throws IllegalBlockSizeException , InvalidKeyException
      包裹一把钥匙。
      参数:
      key - 要包装的密钥
      返回:
      包裹的key
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      IllegalBlockSizeException - 如果此密码是块密码,则未请求填充,并且要包装的密钥的编码长度不是块大小的倍数
      InvalidKeyException - 如果用此密码包装密钥是不可能或不安全的(例如,硬件保护密钥正在传递给纯软件密码)
      UnsupportedOperationException - 如果不支持 CipherSpi 中的相应方法
    • unwrap

      public final Key  unwrap(byte[] wrappedKey, String  wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException , NoSuchAlgorithmException
      打开先前包装的密钥。
      参数:
      wrappedKey - 要解包的密钥
      wrappedKeyAlgorithm - 与包装密钥关联的算法
      wrappedKeyType - 包装密钥的类型。这必须是 SECRET_KEYPRIVATE_KEYPUBLIC_KEY 之一
      返回:
      解包的密钥
      抛出:
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化)
      NoSuchAlgorithmException - 如果没有已安装的提供程序可以为 wrappedKeyAlgorithm 创建类型为 wrappedKeyType 的密钥
      InvalidKeyException - 如果 wrappedKey 不代表 wrappedKeyAlgorithmwrappedKeyType 类型的包装密钥
      UnsupportedOperationException - 如果不支持 CipherSpi 中的相应方法
    • getMaxAllowedKeyLength

      public static final int getMaxAllowedKeyLength(String  transformation) throws NoSuchAlgorithmException
      根据已安装的 JCE 权限策略文件返回指定转换的最大密钥长度。如果安装了 JCE 无限强度管辖策略文件,将返回Integer.MAX_VALUE。有关默认密钥大小和 JCE 管辖策略文件的更多信息,请参阅 JDK 供应商文档 中的密码默认和限制。
      参数:
      transformation - 密码转换
      返回:
      以位或 Integer.MAX_VALUE 为单位的最大密钥长度
      抛出:
      NullPointerException - 如果 transformationnull
      NoSuchAlgorithmException - 如果 transformation 不是有效的转换,即以“算法”或“算法/模式/填充”的形式
      自从:
      1.5
    • getMaxAllowedParameterSpec

      public static final AlgorithmParameterSpec  getMaxAllowedParameterSpec(String  transformation) throws NoSuchAlgorithmException
      返回一个 {code AlgorithmParameterSpec} 对象,其中包含根据管辖策略文件的最大 Cipher 参数值。如果安装了 JCE unlimited strength jurisdiction policy files 或者 policy 文件中指定转换的参数没有最大限制,将返回null
      参数:
      transformation - 密码转换
      返回:
      一个 {code AlgorithmParameterSpec} 对象,它包含最大值或 null
      抛出:
      NullPointerException - 如果 transformationnull
      NoSuchAlgorithmException - 如果 transformation 不是有效的转换,即以“算法”或“算法/模式/填充”的形式
      自从:
      1.5
    • updateAAD

      public final void updateAAD(byte[] src)
      继续附加身份验证数据 (AAD) 的多部分更新。

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

      参数:
      src - 包含附加身份验证数据的缓冲区
      抛出:
      IllegalArgumentException - 如果 src 字节数组是 null
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化),不接受 AAD,或者如果在 GCM 或 CCM 模式下运行并且已调用其中一种 update 方法进行活动加密/解密手术
      UnsupportedOperationException - 如果 CipherSpi 中的相应方法未被实现覆盖
      自从:
      1.7
    • updateAAD

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

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

      参数:
      src - 包含 AAD 的缓冲区
      offset - src 中 AAD 输入开始的偏移量
      len - AAD 字节数
      抛出:
      IllegalArgumentException - 如果 src 字节数组为 null,或者 offsetlength 小于 0,或者 offsetlen 的总和大于 src 字节数组的长度
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化),不接受 AAD,或者如果在 GCM 或 CCM 模式下运行并且已调用其中一种 update 方法进行活动加密/解密手术
      UnsupportedOperationException - 如果 CipherSpi 中的相应方法未被实现覆盖
      自从:
      1.7
    • updateAAD

      public final void updateAAD(ByteBuffer  src)
      继续附加身份验证数据 (AAD) 的多部分更新。

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

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

      参数:
      src - 包含 AAD 的缓冲区
      抛出:
      IllegalArgumentException - 如果 src ByteBuffernull
      IllegalStateException - 如果此 Cipher 对象处于错误状态(例如,尚未初始化),不接受 AAD,或者如果在 GCM 或 CCM 模式下运行并且已调用其中一种 update 方法进行活动加密/解密手术
      UnsupportedOperationException - 如果 CipherSpi 中的相应方法未被实现覆盖
      自从:
      1.7
    • toString

      public String  toString()
      返回此 Cipher 对象的 String 表示。
      重写:
      toString 在类 Object
      实现注意事项:
      此实现返回一个 String,其中包含此 Cipher 对象的转换、模式和提供者。 String 的确切格式未指定,可能会发生变化。
      返回:
      描述此 Cipher 对象的字符串