Module java.base
Package javax.crypto

Class KeyGenerator

java.lang.Object
javax.crypto.KeyGenerator

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

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

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

有两种生成密钥的方式:一种是独立于算法的方式,另一种是特定于算法的方式。两者之间唯一的区别在于对象的初始化:

  • 独立于算法的初始化

    所有密钥生成器共享密钥大小随机源的概念。在这个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安全标准算法名称规范的KeyGenerator部分中有描述。请查阅您的实现的发布文档,以查看是否支持其他算法。
自版本:
1.4
参见:
  • Constructor Details

    • KeyGenerator

      protected KeyGenerator(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm)
      创建一个KeyGenerator对象。
      参数:
      keyGenSpi - 代理
      provider - 提供程序
      algorithm - 算法
  • Method Details

    • getAlgorithm

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

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

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

      public static final KeyGenerator getInstance(String algorithm) throws NoSuchAlgorithmException
      返回一个KeyGenerator对象,用于为指定算法生成秘密密钥。

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

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

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

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

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

      请注意,已注册提供程序的列表可以通过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对象,用于为指定算法生成秘密密钥。

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

      参数:
      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()
      生成一个秘密密钥。
      返回:
      新密钥