- java.lang.Object
-
- javax.crypto.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
- 从以下版本开始:
- 1.4
- 另请参见:
-
SecretKey
- 独立于算法的初始化
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
KeyGenerator(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm)
创建一个KeyGenerator对象。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 SecretKey
generateKey()
生成一个秘密密钥。String
getAlgorithm()
返回此KeyGenerator
对象的算法名称。static KeyGenerator
getInstance(String algorithm)
返回一个生成指定算法的密钥的KeyGenerator
对象。static KeyGenerator
getInstance(String algorithm, String provider)
返回一个KeyGenerator
对象,该对象为指定的算法生成密钥。static KeyGenerator
getInstance(String algorithm, Provider provider)
返回产生指定算法的密钥的KeyGenerator
对象。Provider
getProvider()
返回此KeyGenerator
对象的提供者。void
init(int keysize)
初始化此密钥生成器用于某些密钥大小。void
init(int keysize, SecureRandom random)
使用用户提供的随机源,初始化该密钥生成器以进行某些密钥化。void
init(SecureRandom random)
初始化此密钥生成器。void
init(AlgorithmParameterSpec params)
使用指定的参数集初始化此密钥生成器。void
init(AlgorithmParameterSpec params, SecureRandom random)
使用指定的参数集和用户提供的随机源初始化此密钥生成器。
-
-
-
构造方法详细信息
-
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
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static final KeyGenerator getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回一个KeyGenerator
对象,生成指定算法的密钥。返回从指定提供程序封装KeyGeneratorSpi实现的新KeyGenerator对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过
Security.getProviders()
方法检索。- 参数
-
algorithm
- 请求密钥算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyGenerator部分。 -
provider
- 提供商的名称。 - 结果
-
新的
KeyGenerator
对象 - 异常
-
IllegalArgumentException
- 如果provider
是null
或为空 -
NoSuchAlgorithmException
- 如果指定算法的KeyGeneratorSpi
实现不能从指定的提供者获得 -
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static final KeyGenerator getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回产生指定算法的密钥的KeyGenerator
对象。返回从指定的Provider对象封装KeyGeneratorSpi实现的新KeyGenerator对象。 请注意,指定的Provider对象不必在提供者列表中注册。
- 参数
-
algorithm
- 所请求密钥算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyGenerator部分。 -
provider
- 提供商。 - 结果
-
新的
KeyGenerator
对象 - 异常
-
IllegalArgumentException
- 如果provider
是null
-
NoSuchAlgorithmException
- 如果指定的算法的KeyGeneratorSpi
实现不能从指定的Provider
对象获得 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
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(AlgorithmParameterSpec params, SecureRandom random) throws InvalidAlgorithmParameterException
使用指定的参数集和用户提供的随机源初始化此密钥生成器。- 参数
-
params
- 密钥生成参数 -
random
- 该密钥生成器的随机源 - 异常
-
InvalidAlgorithmParameterException
- 如果params
不适合此密钥生成器
-
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()
生成一个秘密密钥。- 结果
- 新的钥匙
-
-