密钥生成器是使用该类的一个getInstance
类方法构造的。
KeyGenerator
对象是可重用的,即在生成密钥后,可以重复使用同一个KeyGenerator
对象来生成更多的密钥。
有两种生成密钥的方式:一种是独立于算法的方式,另一种是特定于算法的方式。两者之间唯一的区别在于对象的初始化:
- 独立于算法的初始化
所有密钥生成器共享密钥大小和随机源的概念。在这个
KeyGenerator
类中有一个init
方法,它接受这两种普遍共享的参数类型。还有一个只接受keysize
参数的方法,并使用安装的提供程序中优先级最高的SecureRandom
实现作为随机源(如果没有安装的提供程序提供SecureRandom实现,则使用系统提供的随机源),还有一个只接受随机源的方法。由于在调用上述独立于算法的
init
方法时未指定其他参数,因此由提供程序决定如何处理与每个密钥关联的算法特定参数(如果有的话)。 - 特定于算法的初始化
对于已经存在一组特定于算法的参数的情况,有两个带有
AlgorithmParameterSpec
参数的init
方法。其中一个还带有SecureRandom
参数,而另一个使用安装的提供程序中优先级最高的SecureRandom实现作为随机源(如果没有安装的提供程序提供SecureRandom实现)。
如果客户端没有显式初始化KeyGenerator
(通过调用init
方法),则每个提供程序必须提供(并记录)默认初始化。有关JDK提供程序使用的KeyGenerator
默认值的信息,请参阅JDK提供程序文档中的密钥大小限制部分。但是,请注意,不同提供程序的默认值可能有所不同。此外,提供程序的默认值可能在将来的版本中更改。因此,建议显式初始化KeyGenerator
,而不是依赖于特定于提供程序的默认值。
Java平台的每个实现都必须支持以下标准KeyGenerator
算法,其中括号中是密钥大小:
AES
(128)DESede
(168)HmacSHA1
HmacSHA256
- 自版本:
- 1.4
- 参见:
-
Constructor Summary
ModifierConstructorDescriptionprotected
KeyGenerator
(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm) 创建一个KeyGenerator
对象。 -
Method Summary
Modifier and TypeMethodDescriptionfinal SecretKey
生成一个秘密密钥。final String
返回此KeyGenerator
对象的算法名称。static final KeyGenerator
getInstance
(String algorithm) 返回一个KeyGenerator
对象,用于为指定算法生成秘密密钥。static final KeyGenerator
getInstance
(String algorithm, String provider) 返回一个KeyGenerator
对象,用于为指定算法生成秘密密钥。static final KeyGenerator
getInstance
(String algorithm, Provider provider) 返回一个KeyGenerator
对象,用于为指定算法生成秘密密钥。final Provider
返回此KeyGenerator
对象的提供程序。final void
init
(int keysize) 为特定的密钥大小初始化此密钥生成器。final void
init
(int keysize, SecureRandom random) 使用用户提供的随机源为特定的密钥大小初始化此密钥生成器。final void
init
(SecureRandom random) 初始化此密钥生成器。final void
init
(AlgorithmParameterSpec params) 使用指定的参数集初始化此密钥生成器。final void
init
(AlgorithmParameterSpec params, SecureRandom random) 使用指定的参数集和用户提供的随机源初始化此密钥生成器。
-
Constructor Details
-
KeyGenerator
创建一个KeyGenerator
对象。- 参数:
-
keyGenSpi
- 代理 -
provider
- 提供程序 -
algorithm
- 算法
-
-
Method Details
-
getAlgorithm
返回此KeyGenerator
对象的算法名称。这是在创建此
KeyGenerator
对象的getInstance
调用中指定的相同名称。- 返回:
-
此
KeyGenerator
对象的算法名称。
-
getInstance
返回一个KeyGenerator
对象,用于为指定算法生成秘密密钥。此方法遍历已注册的安全提供程序列表,从最优先的提供程序开始。返回一个封装了支持指定算法的第一个提供程序的
KeyGeneratorSpi
实现的新KeyGenerator
对象。请注意,已注册提供程序的列表可以通过
Security.getProviders()
方法检索。- 实现注意:
-
JDK参考实现还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()
返回的提供程序顺序不同。 - 参数:
-
algorithm
- 请求的密钥算法的标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的KeyGenerator部分。 - 返回:
-
新的
KeyGenerator
对象 - 抛出:
-
NoSuchAlgorithmException
- 如果没有提供程序支持指定算法的KeyGeneratorSpi
实现 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getInstance
public static final KeyGenerator getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException 返回一个KeyGenerator
对象,用于为指定算法生成秘密密钥。返回一个封装了指定提供程序的
KeyGeneratorSpi
实现的新KeyGenerator
对象。指定的提供程序必须在安全提供程序列表中注册。请注意,已注册提供程序的列表可以通过
Security.getProviders()
方法检索。- 参数:
-
algorithm
- 请求的密钥算法的标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的KeyGenerator部分。 -
provider
- 提供程序的名称。 - 返回:
-
新的
KeyGenerator
对象 - 抛出:
-
IllegalArgumentException
- 如果provider
为null
或为空 -
NoSuchAlgorithmException
- 如果指定提供程序中没有可用于指定算法的KeyGeneratorSpi
实现 -
NoSuchProviderException
- 如果指定提供程序未在安全提供程序列表中注册 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getInstance
public static final KeyGenerator getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException 返回一个KeyGenerator
对象,用于为指定算法生成秘密密钥。返回一个封装了指定提供程序对象的
KeyGeneratorSpi
实现的新KeyGenerator
对象。请注意,指定的提供程序对象不必在提供程序列表中注册。- 参数:
-
algorithm
- 请求的密钥算法的标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的KeyGenerator部分。 -
provider
- 提供程序。 - 返回:
-
新的
KeyGenerator
对象 - 抛出:
-
IllegalArgumentException
- 如果provider
为null
-
NoSuchAlgorithmException
- 如果指定提供程序对象中没有可用于指定算法的Provider
对象的KeyGeneratorSpi
实现 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getProvider
返回此KeyGenerator
对象的提供程序。- 返回:
-
此
KeyGenerator
对象的提供程序
-
init
初始化此密钥生成器。- 参数:
-
random
- 该生成器的随机源
-
init
使用指定的参数集初始化此密钥生成器。如果此密钥生成器需要任何随机字节,它将使用安装的提供程序中优先级最高的
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
- 密钥大小。这是一个特定于算法的度量,以位数表示。 - 抛出:
-
InvalidParameterException
- 如果密钥大小错误或不受支持。
-
init
使用特定密钥大小和用户提供的随机源初始化此密钥生成器。- 参数:
-
keysize
- 密钥大小。这是一个特定于算法的度量,以位数表示。 -
random
- 该生成器的随机源 - 抛出:
-
InvalidParameterException
- 如果密钥大小错误或不受支持。
-
generateKey
生成一个秘密密钥。- 返回:
- 新密钥
-