模块 java.base

类 KeyGenerator

java.lang.Object
javax.crypto.KeyGenerator

public class KeyGenerator extends Object
此类提供秘密(对称)密钥生成器的功能。

密钥生成器是使用此类的 getInstance 类方法之一构造的。

KeyGenerator 对象是可重复使用的,即在生成密钥后,可以重复使用同一个 KeyGenerator 对象来生成更多密钥。

有两种生成密钥的方法:与算法无关的方式和特定于算法的方式。两者之间的唯一区别是对象的初始化:

  • 独立于算法的初始化

    所有密钥生成器都共享一个概念keysize和一个随机源.在这个 KeyGenerator 类中有一个 init 方法接受这两种普遍共享的参数类型。还有一个只接受一个 keysize 参数,并使用最高优先级已安装提供程序的 SecureRandom 实现作为随机源(如果没有安装的提供程序提供 SecureRandom 实现,则使用系统提供的随机源),并且一个只需要随机性来源的人。

    由于在调用上述独立于算法的 init 方法时未指定其他参数,因此由提供者决定如何处理与每个键关联的特定于算法的参数(如果有)。

  • 特定于算法的初始化

    对于已经存在一组特定于算法的参数的情况,有两个具有AlgorithmParameterSpec参数的init 方法。一个也有一个 SecureRandom 参数,而另一个使用最高优先级安装的提供程序的 SecureRandom 实现作为随机源(或者如果安装的提供程序都没有提供 SecureRandom 实现,则使用系统提供的随机源)。

如果客户端没有显式初始化 KeyGenerator(通过调用 init 方法),每个提供者必须提供(并记录)默认初始化。有关 JDK 提供程序使用的 KeyGenerator 默认值的信息,请参阅 JDK 供应商 文档的密钥大小限制部分。但是,请注意默认值可能因不同的提供商而异。此外,提供程序的默认值可能会在未来版本中更改。因此,建议显式初始化 KeyGenerator 而不是依赖特定于提供程序的默认值。

Java 平台的每个实现都需要支持以下标准 KeyGenerator 算法,括号中的密钥大小:

  • AES (128)
  • DESede (168)
  • HmacSHA1
  • HmacSHA256
这些算法在 Java 安全标准算法名称规范的 密钥生成器部分 中进行了描述。请查阅您的实施的发布文档以查看是否支持任何其他算法。
自从:
1.4
参见:
  • 构造方法详细信息

    • KeyGenerator

      protected KeyGenerator(KeyGeneratorSpi  keyGenSpi, Provider  provider, String  algorithm)
      创建一个 KeyGenerator 对象.
      参数:
      keyGenSpi - 代表
      provider - 供应商
      algorithm - 算法
  • 方法详情

    • getAlgorithm

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

      这与在创建此 KeyGenerator 对象的 getInstance 调用之一中指定的名称相同。

      返回:
      KeyGenerator 对象的算法名称。
    • getInstance

      public static final KeyGenerator  getInstance(String  algorithm) throws NoSuchAlgorithmException
      返回为指定算法生成密钥的 KeyGenerator 对象。

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

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

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

      public static final KeyGenerator  getInstance(String  algorithm, String  provider) throws NoSuchAlgorithmException , NoSuchProviderException
      返回为指定算法生成密钥的 KeyGenerator 对象。

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

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

      参数:
      algorithm - 请求的密钥算法的标准名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyGenerator 部分。
      provider - 提供商的名称。
      返回:
      新的 KeyGenerator 对象
      抛出:
      IllegalArgumentException - 如果 providernull 或为空
      NoSuchAlgorithmException - 如果指定算法的 KeyGeneratorSpi 实现无法从指定提供者处获得
      NoSuchProviderException - 如果指定的提供者没有在安全提供者列表中注册
      NullPointerException - 如果 algorithmnull
      参见:
    • getInstance

      public static final KeyGenerator  getInstance(String  algorithm, Provider  provider) throws NoSuchAlgorithmException
      返回为指定算法生成密钥的 KeyGenerator 对象。

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

      参数:
      algorithm - 请求的密钥算法的标准名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyGenerator 部分。
      provider - 提供商。
      返回:
      新的 KeyGenerator 对象
      抛出:
      IllegalArgumentException - 如果 providernull
      NoSuchAlgorithmException - 如果无法从指定的 Provider 对象获得指定算法的 KeyGeneratorSpi 实现
      NullPointerException - 如果 algorithmnull
      参见:
    • getProvider

      public final Provider  getProvider()
      返回此 KeyGenerator 对象的提供者。
      返回:
      这个 KeyGenerator 对象的提供者
    • init

      public final void init(SecureRandom  random)
      初始化此密钥生成器。
      参数:
      random - 此生成器的随机源
    • init

      public final void init(AlgorithmParameterSpec  params) throws InvalidAlgorithmParameterException
      使用指定的参数集初始化此密钥生成器。

      如果此密钥生成器需要任何随机字节,它将使用最高优先级已安装提供程序的SecureRandom 实现作为随机源来获取它们。 (如果没有安装的提供程序提供 SecureRandom 的实现,将使用系统提供的随机源。)

      参数:
      params——密钥生成参数
      抛出:
      InvalidAlgorithmParameterException - 如果给定的参数不适合此密钥生成器
    • init

      public final void init(AlgorithmParameterSpec  params, SecureRandom  random) throws InvalidAlgorithmParameterException
      使用指定的参数集和用户提供的随机源初始化此密钥生成器。
      参数:
      params——密钥生成参数
      random - 此密钥生成器的随机源
      抛出:
      InvalidAlgorithmParameterException - 如果 params 不适合此密钥生成器
    • init

      public final void init(int keysize)
      为特定密钥大小初始化此密钥生成器。

      如果此密钥生成器需要任何随机字节,它将使用最高优先级已安装提供程序的SecureRandom 实现作为随机源来获取它们。 (如果没有安装的提供程序提供 SecureRandom 的实现,将使用系统提供的随机源。)

      参数:
      keysize - 密钥大小。这是特定于算法的度量,以位数指定。
      抛出:
      InvalidParameterException - 如果密钥大小错误或不受支持。
    • init

      public final void init(int keysize, SecureRandom  random)
      使用用户提供的随机源为特定密钥大小初始化此密钥生成器。
      参数:
      keysize - 密钥大小。这是特定于算法的度量,以位数指定。
      random - 此密钥生成器的随机源
      抛出:
      InvalidParameterException - 如果密钥大小错误或不受支持。
    • generateKey

      public final SecretKey  generateKey()
      生成密钥。
      返回:
      新钥匙