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