javax.crypto

接口
异常
java.lang.Object
  继承者 javax.crypto.KeyGenerator

public class KeyGenerator
     
extends Object

此类提供(对称)密钥生成器的功能。

密钥生成器是使用此类的某个 getInstance 类方法构造的。

KeyGenerator 对象可重复使用,也就是说,在生成密钥后,可以重复使用同一个 KeyGenerator 对象来生成更多的密钥。

生成密钥的方式有两种:与算法无关的方式和特定于算法的方式。两者之间的唯一不同是对象的初始化:

  • 与算法无关的初始化

    所有密钥生成器都具有密钥大小随机源 的概念。此 KeyGenerator 类中有一个 init 方法,它带有这两个通用共享类型的参数。还有一个只带有 keysize 参数的 init 方法,它使用具有最高优先级的已安装提供者的 SecureRandom 实现作为随机源(如果已安装的提供者都不提供 SecureRandom 实现,则使用系统提供的随机源)。此 KeyGenerator 类还提供一个只带随机源参数的 inti 方法。

    因为调用上述与算法无关的 init 方法时未指定其他参数,所以由提供者决定如何处理要与每个密钥关联的特定于算法的参数(如果有)。

  • 特定于算法的初始化

    在已经存在特定于算法的参数集的情况下,有两个带 AlgorithmParameterSpec 参数的 init 方法。其中一个方法还有一个 SecureRandom 参数,而另一个方法将具有高优先级的已安装提供者的 SecureRandom 实现作为随机源(如果安装的提供者都不提供 SecureRandom 实现,则使用系统提供的随机源)。

如果客户端没有显式地初始化 KeyGenerator(通过调用 init 方法),那么每个提供者都必须提供(并记录)默认初始化。

从以下版本开始:
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, Provider provider)
          返回生成指定算法的秘密密钥的 KeyGenerator 对象。
static KeyGenerator getInstance(String algorithm, String provider)
          返回生成指定算法的秘密密钥的 KeyGenerator 对象。
 Provider getProvider()
          返回此 KeyGenerator 对象的提供者。
 void init(AlgorithmParameterSpec params)
          用指定参数集初始化此密钥生成器。
 void init(AlgorithmParameterSpec params, SecureRandom random)
          用指定参数集和用户提供的随机源初始化此密钥生成器。
 void init(int keysize)
          初始化此密钥生成器,使其具有确定的密钥大小。
 void init(int keysize, SecureRandom random)
          使用用户提供的随机源初始化此密钥生成器,使其具有确定的密钥大小。
 void init(SecureRandom random)
          初始化此密钥生成器。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

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 对象,该实现取自支持指定算法的第一个 Provider。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
algorithm - 所请求密钥算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture Reference Guide 中的附录 A。
返回:
新的 KeyGenerator 对象。
抛出:
NullPointerException - 如果指定算法为 null。
NoSuchAlgorithmException - 如果没有 Provider 支持指定算法的 KeyGeneratorSpi 实现。
另请参见:
Provider

getInstance

public static final KeyGenerator getInstance(String algorithm,
                                             String provider)
                                      throws NoSuchAlgorithmException,
                                             NoSuchProviderException
返回生成指定算法的秘密密钥的 KeyGenerator 对象。

返回一个封装 KeyGeneratorSpi 实现的新 KeyGenerator 对象,该实现取自指定的提供者。指定提供者必须在安全提供者列表中注册。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
algorithm - 所请求密钥算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture Reference Guide 中的附录 A。
provider - 提供者的名称。
返回:
新的 KeyGenerator 对象。
抛出:
NullPointerException - 如果指定算法为 null。
NoSuchAlgorithmException - 如果不能从指定提供者获得指定算法的 KeyGeneratorSpi 实现。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException - 如果 provider 为 null 或空。
另请参见:
Provider

getInstance

public static final KeyGenerator getInstance(String algorithm,
                                             Provider provider)
                                      throws NoSuchAlgorithmException
返回生成指定算法的秘密密钥的 KeyGenerator 对象。

返回一个封装 KeyGeneratorSpi 实现的新 KeyGenerator 对象,该实现取自指定的 Provider 对象。 注意,指定的 Provider 对象无需在提供者列表中注册。

参数:
algorithm - 所请求密钥算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture Reference Guide 中的附录 A。
provider - 提供者。
返回:
新的 KeyGenerator 对象。
抛出:
NullPointerException - 如果指定算法为 null。
NoSuchAlgorithmException - 如果不能从指定 Provider 对象获得指定算法的 KeyGeneratorSpi 实现。
IllegalArgumentException - 如果 provider 为 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()
生成一个密钥。

返回:
新的密钥