Module java.base
Package javax.crypto

Class ExemptionMechanism

java.lang.Object
javax.crypto.ExemptionMechanism

public class ExemptionMechanism extends Object
这个类提供了一个豁免机制的功能,例如密钥恢复密钥弱化密钥托管

使用豁免机制的应用程序或小程序可能会获得比不使用的应用程序更强的加密能力。

自JDK版本:
1.4
  • Constructor Details

    • ExemptionMechanism

      protected ExemptionMechanism(ExemptionMechanismSpi exmechSpi, Provider provider, String mechanism)
      创建一个ExemptionMechanism对象。
      参数:
      exmechSpi - 代理
      provider - 提供者
      mechanism - 豁免机制
  • Method Details

    • getName

      public final String getName()
      返回此ExemptionMechanism对象的豁免机制名称。

      这是在创建此ExemptionMechanism对象的getInstance调用中指定的相同名称。

      返回:
      ExemptionMechanism对象的豁免机制名称。
    • getInstance

      public static final ExemptionMechanism getInstance(String algorithm) throws NoSuchAlgorithmException
      返回一个实现指定豁免机制算法的ExemptionMechanism对象。

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

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

      实现说明:
      JDK参考实现还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。这可能与Security.getProviders()返回的提供者顺序不同。
      参数:
      algorithm - 请求的豁免机制的标准名称。有关标准豁免机制名称的信息,请参阅Java安全标准算法名称规范中的豁免机制部分。
      返回:
      新的ExemptionMechanism对象
      抛出:
      NoSuchAlgorithmException - 如果没有Provider支持指定算法的ExemptionMechanismSpi实现
      NullPointerException - 如果algorithmnull
      参见:
    • getInstance

      public static final ExemptionMechanism getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
      返回一个实现指定豁免机制算法的ExemptionMechanism对象。

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

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

      参数:
      algorithm - 请求的豁免机制的标准名称。有关标准豁免机制名称的信息,请参阅Java安全标准算法名称规范中的豁免机制部分。
      provider - 提供者的名称。
      返回:
      新的ExemptionMechanism对象
      抛出:
      IllegalArgumentException - 如果providernull或空
      NoSuchAlgorithmException - 如果指定提供者中不可用指定算法的ExemptionMechanismSpi实现
      NoSuchProviderException - 如果指定提供者未在安全提供者列表中注册
      NullPointerException - 如果algorithmnull
      参见:
    • getInstance

      public static final ExemptionMechanism getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
      返回一个实现指定豁免机制算法的ExemptionMechanism对象。

      返回一个新的ExemptionMechanism对象,封装了指定提供者对象的ExemptionMechanismSpi实现。请注意,指定的提供者对象不必在提供者列表中注册。

      参数:
      algorithm - 请求的豁免机制的标准名称。有关标准豁免机制名称的信息,请参阅Java安全标准算法名称规范中的豁免机制部分。
      provider - 提供者。
      返回:
      新的ExemptionMechanism对象
      抛出:
      IllegalArgumentException - 如果providernull
      NoSuchAlgorithmException - 如果指定Provider对象中不可用指定算法的ExemptionMechanismSpi实现
      NullPointerException - 如果algorithmnull
      参见:
    • getProvider

      public final Provider getProvider()
      返回此ExemptionMechanism对象的提供者。
      返回:
      ExemptionMechanism对象的提供者。
    • isCryptoAllowed

      public final boolean isCryptoAllowed(Key key) throws ExemptionMechanismException
      返回此豁免机制是否成功生成结果 blob。

      该方法还确保传入的密钥与此豁免机制在初始化和生成阶段中使用的密钥相同。

      参数:
      key - 加密将要使用的密钥。
      返回:
      是否此豁免机制成功生成相同密钥的结果 blob;如果keynull,则返回false
      抛出:
      ExemptionMechanismException - 如果在确定此豁免机制对象是否成功生成结果 blob 时遇到问题。
    • getOutputSize

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

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

      参数:
      inputLen - 输入长度(以字节为单位)
      返回:
      所需的输出缓冲区大小(以字节为单位)
      抛出:
      IllegalStateException - 如果此豁免机制处于错误状态(例如,尚未初始化)
    • init

      public final void init(Key key) throws InvalidKeyException, ExemptionMechanismException
      使用密钥初始化此豁免机制。

      如果此豁免机制需要无法从给定key派生的任何算法参数,底层豁免机制实现应该自动生成所需的参数(使用特定于提供者的默认值);如果算法参数必须由调用者指定,则会引发InvalidKeyException

      参数:
      key - 此豁免机制的密钥
      抛出:
      InvalidKeyException - 如果给定的密钥不适用于此豁免机制。
      ExemptionMechanismException - 如果在初始化过程中遇到问题。
    • init

      使用密钥和一组算法参数初始化此豁免机制。

      如果此豁免机制需要任何算法参数,并且paramsnull,则底层豁免机制实现应自动生成所需参数(使用特定于提供程序的默认值);如果算法参数必须由调用者指定,则会引发InvalidAlgorithmParameterException

      参数:
      key - 此豁免机制的密钥
      params - 算法参数
      抛出:
      InvalidKeyException - 如果给定的密钥不适用于此豁免机制。
      InvalidAlgorithmParameterException - 如果给定的算法参数不适用于此豁免机制。
      ExemptionMechanismException - 如果在初始化过程中遇到问题。
    • init

      使用密钥和一组算法参数初始化此豁免机制。

      如果此豁免机制需要任何算法参数,并且paramsnull,则底层豁免机制实现应自动生成所需参数(使用特定于提供程序的默认值);如果算法参数必须由调用者指定,则会引发InvalidAlgorithmParameterException

      参数:
      key - 此豁免机制的密钥
      params - 算法参数
      抛出:
      InvalidKeyException - 如果给定的密钥不适用于此豁免机制。
      InvalidAlgorithmParameterException - 如果给定的算法参数不适用于此豁免机制。
      ExemptionMechanismException - 如果在初始化过程中遇到问题。
    • genExemptionBlob

      public final byte[] genExemptionBlob() throws IllegalStateException, ExemptionMechanismException
      生成豁免机制密钥数据块。
      返回:
      包含结果密钥数据块的新缓冲区。
      抛出:
      IllegalStateException - 如果此豁免机制处于错误状态(例如,尚未初始化)。
      ExemptionMechanismException - 如果在生成过程中遇到问题。
    • genExemptionBlob

      public final int genExemptionBlob(byte[] output) throws IllegalStateException, ShortBufferException, ExemptionMechanismException
      生成豁免机制密钥数据块,并将结果存储在output缓冲区中。

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

      参数:
      output - 结果的缓冲区
      返回:
      存储在output中的字节数
      抛出:
      IllegalStateException - 如果此豁免机制处于错误状态(例如,尚未初始化)。
      ShortBufferException - 如果给定的输出缓冲区太小无法容纳结果。
      ExemptionMechanismException - 如果在生成过程中遇到问题。
    • genExemptionBlob

      public final int genExemptionBlob(byte[] output, int outputOffset) throws IllegalStateException, ShortBufferException, ExemptionMechanismException
      生成豁免机制密钥数据块,并将结果存储在output缓冲区中,从outputOffset开始(包括在内)。

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

      参数:
      output - 结果的缓冲区
      outputOffset - 存储结果的output中的偏移量
      返回:
      存储在output中的字节数
      抛出:
      IllegalStateException - 如果此豁免机制处于错误状态(例如,尚未初始化)。
      ShortBufferException - 如果给定的输出缓冲区太小无法容纳结果。
      ExemptionMechanismException - 如果在生成过程中遇到问题。