模块  java.base
软件包  java.security

Class KeyPairGenerator


  • public abstract class KeyPairGenerator
    extends KeyPairGeneratorSpi
    KeyPairGenerator类用于生成公钥和私钥对。 密钥对生成器使用getInstance工厂方法(返回给定类的实例的静态方法)构造。

    用于特定算法的密钥对生成器创建可与该算法一起使用的公钥/私钥对。 它还将特定于算法的参数与每个生成的密钥相关联。

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

    • 与算法无关的初始化

      所有密钥对生成器共享密钥大小和随机源的概念。 对于不同的算法,密钥大小被不同地解释(例如,在DSA算法的情况下,密钥大小对应于模数的长度)。 此KeyPairGenerator类中有一个initialize方法,它接受这两种通用共享类型的参数。 还有一个只需要keysize参数,并使用优先级最高的安装提供程序的SecureRandom实现作为随机源。 (如果没有安装的提供程序提供SecureRandom的实现,则使用系统提供的随机源。)

      因为当你调用上述与算法无关未指定其他参数initialize方法,它是由供应商做一下具体的算法的参数(如果有的话)要与每个键的相关内容。

      如果算法是DSA算法,并且密钥大小(模数大小)为p或2048,则Sun提供程序将使用一组预先计算的值作为qg参数。 如果模数大小不是上述值之一,则Sun提供程序会创建一组新参数。 其他提供商可能具有预先计算的参数集,其不仅仅是上面提到的模数大小。 还有一些可能根本没有预先计算的参数列表,而是总是创建新的参数集。

    • 特定于算法的初始化

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

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

    请注意,此类是抽象的,并且由于历史原因而从KeyPairGeneratorSpi扩展。 应用程序开发人员只应注意此KeyPairGenerator类中定义的方法; 超类中的所有方法都适用于希望提供自己的密钥对生成器实现的加密服务提供者。

    需要Java平台的每个实现来支持以下标准KeyPairGenerator算法并在括号中键入:

    • DiffieHellmanDiffieHellman
    • DSADSA
    • RSARSA
    这些算法在Java安全标准算法名称规范的KeyPairGenerator section中描述。 请参阅实现的发行文档,以了解是否支持任何其他算法。
    从以下版本开始:
    1.1
    另请参见:
    AlgorithmParameterSpec
    • 构造方法详细信息

    • 方法详细信息

      • getInstance

        public static KeyPairGenerator getInstance​(String algorithm)
                                            throws NoSuchAlgorithmException
        返回KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。

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

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

        Implementation Note:
        JDK Reference Implementation还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。
        参数
        algorithm - 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。
        结果
        新的 KeyPairGenerator对象
        异常
        NoSuchAlgorithmException - 如果没有 Provider支持指定算法的 KeyPairGeneratorSpi实现
        NullPointerException - 如果 algorithmnull
        另请参见:
        Provider
      • getInstance

        public static KeyPairGenerator getInstance​(String algorithm,
                                                   Provider provider)
                                            throws NoSuchAlgorithmException
        返回KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。

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

        参数
        algorithm - 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。
        provider - 提供者。
        结果
        新的 KeyPairGenerator对象
        异常
        IllegalArgumentException - 如果指定的提供者是 null
        NoSuchAlgorithmException - 如果指定的算法的 KeyPairGeneratorSpi实现不可用于指定的 Provider对象
        NullPointerException - 如果 algorithmnull
        从以下版本开始:
        1.4
        另请参见:
        Provider
      • getProvider

        public final Provider getProvider()
        返回此密钥对生成器对象的提供者。
        结果
        此密钥对生成器对象的提供者
      • initialize

        public void initialize​(int keysize)
        使用默认参数集和最高优先级安装提供程序的SecureRandom实现作为随机源初始化特定密钥大小的密钥对生成器。 (如果没有安装的提供程序提供SecureRandom的实现,则使用系统提供的随机源。)
        参数
        keysize - 密钥大小。 这是一个特定于算法的度量,例如模数长度,以位数指定。
        异常
        InvalidParameterException - 如果此KeyPairGenerator对象不支持 keysize
      • initialize

        public void initialize​(int keysize,
                               SecureRandom random)
        使用给定的随机源(以及默认参数集)初始化特定密钥大小的密钥对生成器。
        Specified by:
        initialize ,课程 KeyPairGeneratorSpi
        参数
        keysize - 密钥大小。 这是一个特定于算法的度量,例如模数长度,以位数指定。
        random - 随机性的来源。
        异常
        InvalidParameterException - 如果此KeyPairGenerator对象不支持 keysize
        从以下版本开始:
        1.2
      • initialize

        public void initialize​(AlgorithmParameterSpec params)
                        throws InvalidAlgorithmParameterException
        使用指定的参数集和最高优先级安装的提供程序的SecureRandom实现作为随机源初始化密钥对生成器。 (如果没有安装的提供程序提供SecureRandom的实现,则使用系统提供的随机源。)

        此具体方法已添加到此先前定义的抽象类中。 此方法调用KeyPairGeneratorSpi initialize方法,传递它params和随机源(从最高优先级安装的提供程序或系统提供,如果没有安装的提供程序提供一个)。 如果提供程序未覆盖initialize方法,则始终抛出UnsupportedOperationException。

        参数
        params - 用于生成密钥的参数集。
        异常
        InvalidAlgorithmParameterException - 如果给定的参数不适合此密钥对生成器。
        从以下版本开始:
        1.2
      • initialize

        public void initialize​(AlgorithmParameterSpec params,
                               SecureRandom random)
                        throws InvalidAlgorithmParameterException
        使用给定的参数集和随机源初始化密钥对生成器。

        此具体方法已添加到此先前定义的抽象类中。 此方法调用KeyPairGeneratorSpi initialize方法,并将其传递给paramsrandom 如果提供程序未覆盖initialize方法,则始终抛出UnsupportedOperationException。

        重写:
        initialize ,课程 KeyPairGeneratorSpi
        参数
        params - 用于生成密钥的参数集。
        random - 随机性的来源。
        异常
        InvalidAlgorithmParameterException - 如果给定的参数不适合此密钥对生成器。
        从以下版本开始:
        1.2
      • genKeyPair

        public final KeyPair genKeyPair()
        生成密钥对。

        如果此KeyPairGenerator尚未显式初始化,则特定于提供程序的默认值将用于生成的键的大小和其他(特定于算法的)值。

        这将在每次调用时生成一个新密钥对。

        此方法在功能上等效于generateKeyPair

        结果
        生成的密钥对
        从以下版本开始:
        1.2
      • generateKeyPair

        public KeyPair generateKeyPair()
        生成密钥对。

        如果此KeyPairGenerator尚未显式初始化,则特定于提供程序的默认值将用于生成的键的大小和其他(特定于算法的)值。

        这将在每次调用时生成一个新密钥对。

        此方法在功能上等效于genKeyPair

        Specified by:
        generateKeyPair在课程 KeyPairGeneratorSpi
        结果
        生成的密钥对