- 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 描述 protectedKeyGenerator(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm)创建一个KeyGenerator对象。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 SecretKeygenerateKey()生成一个秘密密钥。StringgetAlgorithm()返回此KeyGenerator对象的算法名称。static KeyGeneratorgetInstance(String algorithm)返回一个生成指定算法的密钥的KeyGenerator对象。static KeyGeneratorgetInstance(String algorithm, String provider)返回一个KeyGenerator对象,该对象为指定的算法生成密钥。static KeyGeneratorgetInstance(String algorithm, Provider provider)返回产生指定算法的密钥的KeyGenerator对象。ProvidergetProvider()返回此KeyGenerator对象的提供者。voidinit(int keysize)初始化此密钥生成器用于某些密钥大小。voidinit(int keysize, SecureRandom random)使用用户提供的随机源,初始化该密钥生成器以进行某些密钥化。voidinit(SecureRandom random)初始化此密钥生成器。voidinit(AlgorithmParameterSpec params)使用指定的参数集初始化此密钥生成器。voidinit(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.preferredSecurity属性来确定指定算法的首选提供者顺序。 这可能与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()
生成一个秘密密钥。- 结果
- 新的钥匙
-
-