- 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
- 与算法无关的初始化
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
KeyGenerator(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm)
创建KeyGenerator对象。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 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
对象,该对象为指定的算法生成密钥。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回一个新的KeyGenerator对象,该对象从第一个支持指定算法的Provider封装KeyGeneratorSpi实现。
请注意,可以通过
Security.getProviders()
方法检索已注册提供程序的列表。- Implementation Note:
-
JDK Reference Implementation还使用
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
对象,该对象为指定的算法生成密钥。将返回一个新的KeyGenerator对象,该对象封装了指定提供程序的KeyGeneratorSpi实现。 必须在安全提供程序列表中注册指定的提供程序。
请注意,可以通过
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
- 密钥大小。 这是一个特定于算法的度量,以位数指定。 - 异常
-
InvalidParameterException
- 如果密钥大小错误或不受支持。
-
init
public final void init(int keysize, SecureRandom random)
使用用户提供的随机源为特定密钥大小初始化此密钥生成器。- 参数
-
keysize
- 密钥大小。 这是一个特定于算法的度量,以位数指定。 -
random
- 此密钥生成器的随机源 - 异常
-
InvalidParameterException
- 如果密钥大小错误或不受支持。
-
generateKey
public final SecretKey generateKey()
生成密钥。- 结果
- 新钥匙
-
-