- java.lang.Object
-
- java.security.KeyPairGeneratorSpi
-
- java.security.KeyPairGenerator
-
public abstract class KeyPairGenerator extends KeyPairGeneratorSpi
KeyPairGenerator类用于生成公钥和私钥对。 密钥对生成器使用getInstance
工厂方法(返回给定类的实例的静态方法)构造。用于特定算法的密钥对生成器创建可以与该算法一起使用的公钥/私钥对。 它还将算法特定的参数与生成的每个密钥相关联。
生成密钥对的方式有两种:以算法无关的方式,并以算法特定的方式。 两者之间的唯一区别是对象的初始化:
- 独立于算法的初始化
所有密钥对生成器共享密钥大小和随机源的概念。 对于不同的算法来说,keyize被不同地解释(例如,在DSA算法的情况下,keysize对应于模数的长度)。 这个KeyPairGenerator类中有一个
initialize
方法,它接受这两个普遍共享的参数类型。 还有一个只需要一个keysize
参数,并使用最高优先级的安装提供程序的SecureRandom
实现作为随机源。 (如果没有一个已安装的提供商提供SecureRandom
的实现,则使用系统提供的随机源。)由于在调用上述与算法无关的
initialize
方法时没有指定其他参数,因此提供者如何处理与每个密钥相关联的特定于算法的参数(如果有的话)。如果算法是DSA算法,并且keysize(模数大小)是
p
或2048,那么Sun提供商使用一组预计算值作为q
和g
参数。 如果模数大小不是上述值之一, Sun提供商将创建一组新的参数。 其他提供商可能具有超过上述模数大小的预计算参数集。 还有一些可能没有预先计算的参数的列表,而不是总是创建新的参数集。 - 特定于算法的初始化
对于已经存在一组特定于算法的参数(例如,DSA中所谓的社区参数 )的情况,有两个
initialize
方法具有AlgorithmParameterSpec
参数。 一个也有一个SecureRandom
参数,而另一个使用最高优先级安装的提供者的SecureRandom
实现作为随机的来源。 (如果没有一个已安装的提供商提供SecureRandom
的实现,则使用系统提供的随机源。)
如果客户端没有显式初始化KeyPairGenerator(通过调用
initialize
方法),则每个提供程序都必须提供(并记录)默认的初始化。 有关JDK提供程序使用的KeyPairGenerator默认值的信息,请参阅JDK Providers文档的Keysize Restriction部分。 不过,请注意,不同提供商的默认值可能会有所不同。 此外,提供者的默认值可能会在将来的版本中更改。 因此,建议明确地初始化KeyPairGenerator,而不是依赖于提供者特定的默认值。注意,这个类是抽象的,由于历史原因而从
KeyPairGeneratorSpi
扩展。 应用程序开发人员只应注意KeyPairGenerator
类中定义的方法; 超类中的所有方法都适用于希望提供自己的密钥对生成器实现的加密服务提供商。Java平台的每个实现都需要支持以下标准的
KeyPairGenerator
算法,并在括号中键入:-
DiffieHellman
(DiffieHellman
) -
DSA
(DSA
) -
RSA
(RSA
)
- 从以下版本开始:
- 1.1
- 另请参见:
-
AlgorithmParameterSpec
- 独立于算法的初始化
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
KeyPairGenerator(String algorithm)
为指定的算法创建一个KeyPairGenerator对象。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 KeyPair
generateKeyPair()
生成一个密钥对。KeyPair
genKeyPair()
生成一个密钥对。String
getAlgorithm()
返回此密钥对生成器的算法的标准名称。static KeyPairGenerator
getInstance(String algorithm)
返回一个KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。static KeyPairGenerator
getInstance(String algorithm, String provider)
返回一个KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。static KeyPairGenerator
getInstance(String algorithm, Provider provider)
返回一个KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。Provider
getProvider()
返回此密钥对生成器对象的提供者。void
initialize(int keysize)
使用默认参数集和最高优先级安装的提供程序的SecureRandom
实现来初始化密钥对生成器作为随机源。void
initialize(int keysize, SecureRandom random)
使用给定的随机源(和默认参数集)初始化特定密钥大小的密钥对生成器。void
initialize(AlgorithmParameterSpec params)
使用指定的参数集和最优先安装的提供程序的SecureRandom
实现来初始化密钥对生成器作为随机源。void
initialize(AlgorithmParameterSpec params, SecureRandom random)
使用给定的参数集和随机源初始化密钥对生成器。
-
-
-
构造方法详细信息
-
KeyPairGenerator
protected KeyPairGenerator(String algorithm)
为指定的算法创建一个KeyPairGenerator对象。- 参数
-
algorithm
- 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。
-
-
方法详细信息
-
getAlgorithm
public String getAlgorithm()
返回此密钥对生成器的算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。- 结果
- 算法的标准字符串名称。
-
getInstance
public static KeyPairGenerator getInstance(String algorithm) throws NoSuchAlgorithmException
返回一个KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装KeyPairGeneratorSpi实现的新KeyPairGenerator对象。
注意,可以通过
Security.getProviders()
方法检索注册提供商的列表。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()
返回的提供商的顺序不同。 - 参数
-
algorithm
- 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。 - 结果
-
新的
KeyPairGenerator
对象 - 异常
-
NoSuchAlgorithmException
- 如果没有Provider
支持指定算法的KeyPairGeneratorSpi
实现 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static KeyPairGenerator getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回一个KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。返回从指定提供程序封装KeyPairGeneratorSpi实现的新KeyPairGenerator对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- 参数
-
algorithm
- 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。 -
provider
- 提供程序的字符串名称。 - 结果
-
新的
KeyPairGenerator
对象 - 异常
-
IllegalArgumentException
- 如果提供商名称为null
或为空 -
NoSuchAlgorithmException
- 如果指定算法的KeyPairGeneratorSpi
实现不能从指定的提供者获得 -
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static KeyPairGenerator getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回一个KeyPairGenerator对象,该对象为指定的算法生成公钥/私钥对。返回从指定的Provider对象封装KeyPairGeneratorSpi实现的新KeyPairGenerator对象。 请注意,指定的Provider对象不必在提供者列表中注册。
- 参数
-
algorithm
- 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyPairGenerator部分。 -
provider
- 提供商。 - 结果
-
新的
KeyPairGenerator
对象 - 异常
-
IllegalArgumentException
- 如果指定的提供者是null
-
NoSuchAlgorithmException
- 如果指定的算法的KeyPairGeneratorSpi
实现不能从指定的Provider
对象获得 -
NullPointerException
- 如果algorithm
是null
- 从以下版本开始:
- 1.4
- 另请参见:
-
Provider
-
getProvider
public final Provider getProvider()
返回此密钥对生成器对象的提供者。- 结果
- 这个密钥对生成器对象的提供者
-
initialize
public void initialize(int keysize)
使用默认参数集和最高优先级安装提供程序的SecureRandom
实现作为随机源,初始化某个密钥大小的密钥对生成器。 (如果没有一个已安装的提供商提供了一个SecureRandom
的实现,则使用系统提供的随机源。)- 参数
-
keysize
-keysize
。 这是一种算法特定的度量,例如以位数指定的模数长度。 - 异常
-
InvalidParameterException
- 如果此KeyPairGenerator对象不支持keysize
。
-
initialize
public void initialize(int keysize, SecureRandom random)
使用给定的随机源(和默认参数集)初始化特定密钥大小的密钥对生成器。- Specified by:
-
initialize
在KeyPairGeneratorSpi
- 参数
-
keysize
-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
方法,传递给它params
和random
。 那个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
- 结果
- 生成的密钥对
-
-