KeyPairGenerator
类用于生成公钥和私钥对。密钥对生成器是使用getInstance
工厂方法(返回给定类的实例的静态方法)构造的。
用于特定算法的密钥对生成器创建一个可与该算法一起使用的公钥/私钥对。它还将算法特定参数与生成的每个密钥关联起来。
有两种生成密钥对的方式:一种是独立于算法的方式,另一种是特定于算法的方式。两者之间唯一的区别在于对象的初始化:
- 独立于算法的初始化
所有密钥对生成器共享密钥大小和随机源的概念。密钥大小对不同算法有不同的解释(例如,在DSA算法的情况下,密钥大小对应于模的长度)。在这个
KeyPairGenerator
类中有一个initialize
方法,它接受这两种普遍共享的参数类型。还有一个只接受keysize
参数的方法,并使用安装的提供程序中优先级最高的SecureRandom
实现作为随机源。(如果没有安装的提供程序提供SecureRandom
的实现,则使用系统提供的随机源。)由于在调用上述独立于算法的
initialize
方法时未指定其他参数,因此由提供程序决定如何处理与每个密钥关联的算法特定参数(如果有的话)。如果算法是DSA算法,且密钥大小(模大小)为512、768、1024或2048,则Sun提供程序使用一组预先计算的值作为
p
、q
和g
参数。如果模大小不是上述值之一,则Sun提供程序会创建一个新的参数集。其他提供程序可能为不止上述模大小预先计算参数集。还有一些可能根本没有预先计算参数列表,而总是创建新的参数集。 - 特定于算法的初始化
对于已经存在一组特定于算法的参数的情况(例如DSA中的所谓社区参数),有两个带有
AlgorithmParameterSpec
参数的initialize
方法。其中一个还带有SecureRandom
参数,而另一个使用安装的提供程序中优先级最高的SecureRandom
实现作为随机源。(如果没有安装的提供程序提供SecureRandom
的实现,则使用系统提供的随机源。)
如果客户端没有显式初始化KeyPairGenerator
(通过调用initialize
方法),则每个提供程序必须提供(并记录)默认初始化。有关JDK提供程序使用的KeyPairGenerator
默认值的信息,请参阅JDK提供程序文档中的Keysize Restriction部分。但是,请注意,不同提供程序的默认值可能有所不同。此外,提供程序的默认值可能在将来的版本中更改。因此,建议显式初始化KeyPairGenerator
,而不是依赖于特定于提供程序的默认值。
请注意,此类是抽象类,并出于历史原因扩展自KeyPairGeneratorSpi
。应用程序开发人员应仅注意此KeyPairGenerator
类中定义的方法;超类中的所有方法都是为希望提供其自己的密钥对生成器实现的加密服务提供者而定义的。
Java平台的每个实现都必须支持以下标准KeyPairGenerator
算法和密钥大小(括号中):
DiffieHellman
(1024、2048、4096)DSA
(1024、2048)RSA
(1024、2048、4096)
- 自版本:
- 1.1
- 参见:
-
Constructor Summary
ModifierConstructorDescriptionprotected
KeyPairGenerator
(String algorithm) 为指定的算法创建一个KeyPairGenerator
对象。 -
Method Summary
Modifier and TypeMethodDescription生成密钥对。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) 使用给定的参数集和随机源初始化密钥对生成器。
-
Constructor Details
-
KeyPairGenerator
为指定的算法创建一个KeyPairGenerator
对象。- 参数:
-
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的KeyPairGenerator部分。
-
-
Method Details
-
getAlgorithm
返回此密钥对生成器的算法的标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的KeyPairGenerator部分。- 返回:
- 算法的标准字符串名称。
-
getInstance
返回一个为指定算法生成公钥/私钥对的KeyPairGenerator
对象。此方法遍历注册的安全提供程序列表,从最优先的提供程序开始。返回一个封装了支持指定算法的第一个提供程序的
KeyPairGeneratorSpi
实现的新KeyPairGenerator
对象。请注意,注册的提供程序列表可以通过
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
对象。返回一个封装了指定提供程序中支持的
KeyPairGeneratorSpi
实现的新KeyPairGenerator
对象。指定的提供程序必须在安全提供程序列表中注册。请注意,注册的提供程序列表可以通过
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
对象,用于为指定算法生成公钥/私钥对。返回一个封装了指定提供程序中的
KeyPairGeneratorSpi
实现的新KeyPairGenerator
对象。请注意,指定的提供程序不必在提供程序列表中注册。- 参数:
-
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的KeyPairGenerator部分。 -
provider
- 提供程序。 - 返回:
-
新的
KeyPairGenerator
对象 - 抛出:
-
IllegalArgumentException
- 如果指定的提供程序为null
-
NoSuchAlgorithmException
- 如果指定算法的KeyPairGeneratorSpi
实现不可从指定的Provider
对象获取 -
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
中 - 返回:
- 生成的密钥对
-