KeyPairGenerator
类用于生成公钥和私钥对。密钥对生成器是使用 getInstance
工厂方法(返回给定类实例的静态方法)构造的。
特定算法的密钥对生成器创建可与该算法一起使用的公钥/私钥对。它还将特定于算法的参数与每个生成的密钥相关联。
有两种生成密钥对的方法:独立于算法的方式和特定于算法的方式。两者之间的唯一区别是对象的初始化:
- 独立于算法的初始化
所有密钥对生成器都共享密钥大小和随机源的概念。密钥大小对于不同的算法有不同的解释(例如,在DSA算法,密钥大小对应于模数的长度)。在这个
KeyPairGenerator
类中有一个initialize
方法接受这两种普遍共享的参数类型。还有一个只接受keysize
参数,并使用最高优先级已安装提供程序的SecureRandom
实现作为随机源。 (如果没有安装的提供程序提供SecureRandom
的实现,则使用系统提供的随机源。)由于在调用上述独立于算法的
initialize
方法时未指定其他参数,因此由提供者决定如何处理与每个键相关联的特定于算法的参数(如果有)。如果算法是DSA算法,密钥大小(模数大小)为 512、768、1024 或 2048,则太阳provider 为
p
、q
和g
参数使用一组预先计算的值。如果模数大小不是上述值之一,则太阳provider 创建一组新的参数。其他提供者可能已经预先计算了参数集,而不仅仅是上面提到的模数大小。还有一些可能根本没有预先计算的参数列表,而是总是创建新的参数集。 - 特定于算法的初始化
对于已经存在一组算法特定参数的情况(例如,所谓的社区参数在 DSA 中),有两个
initialize
方法有一个AlgorithmParameterSpec
参数。一个也有一个SecureRandom
参数,而另一个使用最高优先级安装提供程序的SecureRandom
实现作为随机源。 (如果没有安装的提供程序提供SecureRandom
的实现,则使用系统提供的随机源。)
如果客户端未显式初始化 KeyPairGenerator
(通过调用 initialize
方法),每个提供者必须提供(并记录)默认初始化。有关 JDK 提供程序使用的 KeyPairGenerator
默认值的信息,请参阅 JDK 供应商 文档的密钥大小限制部分。但是,请注意默认值可能因不同的提供商而异。此外,提供程序的默认值可能会在未来版本中更改。因此,建议显式初始化 KeyPairGenerator
而不是依赖特定于提供程序的默认值。
请注意,此类是抽象的,并且由于历史原因从 KeyPairGeneratorSpi
扩展而来。应用程序开发人员应该只注意这个 KeyPairGenerator
类中定义的方法;超类中的所有方法都适用于希望提供自己的密钥对生成器实现的密码服务提供商。
Java 平台的每个实现都需要支持以下标准 KeyPairGenerator
算法和括号中的密钥大小:
DiffieHellman
(1024, 2048, 4096)DSA
(1024, 2048)RSA
(1024, 2048, 4096)
- 自从:
- 1.1
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述生成密钥对。final KeyPair
生成密钥对。返回此密钥对生成器算法的标准名称。static KeyPairGenerator
getInstance
(String algorithm) 返回为指定算法生成公钥/私钥对的KeyPairGenerator
对象。static KeyPairGenerator
getInstance
(String algorithm, String provider) 返回为指定算法生成公钥/私钥对的KeyPairGenerator
对象。static KeyPairGenerator
getInstance
(String algorithm, Provider provider) 返回为指定算法生成公钥/私钥对的KeyPairGenerator
对象。final Provider
返回此密钥对生成器对象的提供者。void
initialize
(int keysize) 使用默认参数集和最高优先级已安装提供程序的SecureRandom
实现作为随机源,为特定密钥大小初始化密钥对生成器。void
initialize
(int keysize, SecureRandom random) 使用给定的随机源(和默认参数集)为特定密钥大小初始化密钥对生成器。void
initialize
(AlgorithmParameterSpec params) 使用指定的参数集和最高优先级安装提供程序的SecureRandom
实现作为随机源来初始化密钥对生成器。void
initialize
(AlgorithmParameterSpec params, SecureRandom random) 使用给定的参数集和随机源初始化密钥对生成器。
-
构造方法详细信息
-
KeyPairGenerator
为指定算法创建一个KeyPairGenerator
对象。- 参数:
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyPairGenerator 部分。
-
-
方法详情
-
getAlgorithm
返回此密钥对生成器算法的标准名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyPairGenerator 部分。- 返回:
- 算法的标准字符串名称。
-
getInstance
返回为指定算法生成公钥/私钥对的KeyPairGenerator
对象。此方法遍历已注册的安全提供者列表,从最喜欢的提供者开始。返回一个新的
KeyPairGenerator
对象,该对象封装了来自支持指定算法的第一个提供者的KeyPairGeneratorSpi
实现。请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- 实现注意事项:
-
JDK 参考实现还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()
返回的提供商顺序不同。 - 参数:
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyPairGenerator 部分。- 返回:
-
新的
KeyPairGenerator
对象 - 抛出:
NoSuchAlgorithmException
- 如果没有Provider
支持指定算法的KeyPairGeneratorSpi
实现NullPointerException
- 如果algorithm
是null
- 参见:
-
getInstance
public static KeyPairGenerator getInstance(String algorithm, String provider) throws NoSuchAlgorithmException , NoSuchProviderException 返回为指定算法生成公钥/私钥对的KeyPairGenerator
对象。返回一个新的
KeyPairGenerator
对象,封装了来自指定提供者的KeyPairGeneratorSpi
实现。指定的提供者必须在安全提供者列表中注册。请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- 参数:
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyPairGenerator 部分。provider
- 提供者的字符串名称。- 返回:
-
新的
KeyPairGenerator
对象 - 抛出:
IllegalArgumentException
- 如果提供商名称为null
或为空NoSuchAlgorithmException
- 如果指定算法的KeyPairGeneratorSpi
实现无法从指定的提供商处获得NoSuchProviderException
- 如果指定的提供者没有在安全提供者列表中注册NullPointerException
- 如果algorithm
是null
- 参见:
-
getInstance
public static KeyPairGenerator getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException 返回为指定算法生成公钥/私钥对的KeyPairGenerator
对象。返回一个新的
KeyPairGenerator
对象,封装了来自指定提供者的KeyPairGeneratorSpi
实现。请注意,指定的提供者不必在提供者列表中注册。- 参数:
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java 安全标准算法名称规范 中的 KeyPairGenerator 部分。provider
- 提供商。- 返回:
-
新的
KeyPairGenerator
对象 - 抛出:
IllegalArgumentException
- 如果指定的提供者是null
NoSuchAlgorithmException
- 如果无法从指定的Provider
对象获得指定算法的KeyPairGeneratorSpi
实现NullPointerException
- 如果algorithm
是null
- 自从:
- 1.4
- 参见:
-
getProvider
返回此密钥对生成器对象的提供者。- 返回:
- 此密钥对生成器对象的提供者
-
initialize
public void initialize(int keysize) 使用默认参数集和最高优先级已安装提供程序的SecureRandom
实现作为随机源,为特定密钥大小初始化密钥对生成器。 (如果没有安装的提供程序提供SecureRandom
的实现,则使用系统提供的随机源。)- 参数:
keysize
- 密钥大小。这是特定于算法的度量,例如以位数指定的模数长度。- 抛出:
InvalidParameterException
- 如果此KeyPairGenerator
对象不支持keysize
。
-
initialize
使用给定的随机源(和默认参数集)为特定密钥大小初始化密钥对生成器。- 指定者:
initialize
在类KeyPairGeneratorSpi
中- 参数:
keysize
- 密钥大小。这是特定于算法的度量,例如以位数指定的模数长度。random
- 随机性的来源。- 抛出:
InvalidParameterException
- 如果此KeyPairGenerator
对象不支持keysize
。- 自从:
- 1.2
-
initialize
使用指定的参数集和最高优先级安装提供程序的SecureRandom
实现作为随机源来初始化密钥对生成器。 (如果没有安装的提供程序提供SecureRandom
的实现,则使用系统提供的随机源。)此具体方法已添加到此先前定义的抽象类中。此方法调用 KeyPairGeneratorSpi
initialize
方法,将其传递给params
和一个随机源(从最高优先级的已安装提供程序获得,如果没有已安装的提供程序提供,则由系统提供)。如果提供者未覆盖该initialize
方法,它总是会抛出一个UnsupportedOperationException
。- 参数:
params
- 用于生成密钥的参数集。- 抛出:
InvalidAlgorithmParameterException
- 如果给定的参数不适合此密钥对生成器。- 自从:
- 1.2
-
initialize
public void initialize(AlgorithmParameterSpec params, SecureRandom random) throws InvalidAlgorithmParameterException 使用给定的参数集和随机源初始化密钥对生成器。此具体方法已添加到此先前定义的抽象类中。此方法调用 KeyPairGeneratorSpi
initialize
方法,将其传递给params
和random
。如果提供者未覆盖该initialize
方法,它总是会抛出一个UnsupportedOperationException
。- 重写:
initialize
在类KeyPairGeneratorSpi
中- 参数:
params
- 用于生成密钥的参数集。random
- 随机性的来源。- 抛出:
InvalidAlgorithmParameterException
- 如果给定的参数不适合此密钥对生成器。- 自从:
- 1.2
-
genKeyPair
生成密钥对。如果这个
KeyPairGenerator
没有被显式初始化,特定于提供者的默认值将用于生成键的大小和其他(特定于算法的)值。这将在每次调用时生成一个新的密钥对。
此方法在功能上等同于
generateKeyPair
。- 返回:
- 生成的密钥对
- 自从:
- 1.2
-
generateKeyPair
生成密钥对。如果这个
KeyPairGenerator
没有被显式初始化,特定于提供者的默认值将用于生成键的大小和其他(特定于算法的)值。这将在每次调用时生成一个新的密钥对。
此方法在功能上等同于
genKeyPair
。- 指定者:
generateKeyPair
在类KeyPairGeneratorSpi
中- 返回:
- 生成的密钥对
-