Module  java.base
软件包  javax.crypto

Class KeyGenerator



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

    密钥生成器使用getInstance类方法之一构建。

    KeyGenerator对象是可重用的,即在生成一个密钥之后,可以重新使用相同的KeyGenerator对象来生成其他密钥。

    有两种方式来生成一个密钥:以一种算法无关的方式,并以一种算法特定的方式。 两者之间的唯一区别是对象的初始化:

    • 独立于算法的初始化

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

      由于当您调用上述与算法无关的init方法时,没有指定其他参数,因此提供者如何处理与每个密钥相关的特定于算法的参数(如果有的话)。

    • 特定于算法的初始化

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

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

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

    • AES (128)
    • DES (56)
    • DESede (168)
    • HmacSHA1
    • HmacSHA256
    这些算法在Java安全标准算法名称规范的KeyGenerator section中进行了描述。 请参阅发行说明文件以了解是否支持其他算法。
    从以下版本开始:
    1.4
    另请参见:
    SecretKey
    • 构造方法详细信息

      • 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对象。

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

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

        Implementation Note:
        JDK参考实现还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。
        参数
        algorithm - 所请求密钥算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyGenerator部分。
        结果
        新的 KeyGenerator对象
        异常
        NoSuchAlgorithmException - 如果否 Provider支持指定算法的 KeyGeneratorSpi实现
        NullPointerException - 如果 algorithmnull
        另请参见:
        Provider
      • 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​(int keysize)
        初始化此密钥生成器用于某些密钥大小。

        如果这个密钥生成器需要任何随机字节,它将使用最高优先级安装的提供者的SecureRandom实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom的实现,将会使用系统提供的随机源。)

        参数
        keysize - keysize 这是一个以比特数表示的算法特定度量。
        异常
        InvalidParameterException - 如果keysize错误或不支持。
      • init

        public final void init​(int keysize,
                               SecureRandom random)
        使用用户提供的随机源,初始化该密钥生成器以进行某些密钥化。
        参数
        keysize - keysize 这是一个以比特数表示的算法特定度量。
        random - 此密钥生成器的随机源
        异常
        InvalidParameterException - 如果keysize错误或不支持。
      • generateKey

        public final SecretKey generateKey​()
        生成一个秘密密钥。
        结果
        新的钥匙