java.security

接口
异常
java.lang.Object
  继承者 java.security.KeyPairGeneratorSpi
      继承者 java.security.KeyPairGenerator

public abstract class KeyPairGenerator
     
extends KeyPairGeneratorSpi

KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。

特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。

有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式。两种方式的唯一区别在于对象的初始化:

  • 与算法无关的初始化

    所有的密钥对生成器遵循密钥大小和随机源的概念。对于不同的算法,密钥大小的解释也不相同(例如,对于 DSA 算法,密钥大小对应于模的长度)。此 KeyPairGenerator 类有一个 initialize 方法,该方法带有两个通用的共享类型的参数。还有一个只带有 keysize 参数的方法,它使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

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

    如果算法为 DSA 算法,密钥大小(模大小)为 512、768 或 1024,那么 Sun 提供者对 pqg 参数使用一组预计算值。如果模大小不是上述值之一,则 Sun 提供者创建一个新的参数集合。其他提供者可能具有供更多模大小(不仅仅是上文提及的那三个)使用的预计算参数集合。其他提供者也可能没有任何预计算参数列表,而总是创建新的参数集合。

  • 特定于算法的初始化

    对于特定于算法的参数集合已存在的情况(例如,DSA 中所谓的公用参数),有两个 initialize 方法具有 AlgorithmParameterSpec 参数。其中一个方法还有一个 SecureRandom 参数,而另一个方法使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

每个提供者都必须提供(并记录)默认的初始化,以防客户端没有显式初始化 KeyPairGenerator(通过调用 initialize 方法)。例如,Sun 提供者使用 1024 位的默认模大小(密钥大小)。

注意,由于历史原因,此类是抽象类,是从 KeyPairGeneratorSpi 扩展的。应用程序开发人员只需注意在此 KeyPairGenerator 类中定义的方法;超类中的所有方法是供加密服务提供者使用的,这些加密服务提供者希望提供自己的密钥对生成器实现。

另请参见:
AlgorithmParameterSpec

构造方法摘要
protected KeyPairGenerator(String algorithm)
          为指定的算法创建 KeyPairGenerator 对象。
 
方法摘要
 KeyPair generateKeyPair()
          生成一个密钥对。
 KeyPair genKeyPair()
          生成密钥对。
 String getAlgorithm()
          返回此密钥对生成器算法的标准名称。
static KeyPairGenerator getInstance(String algorithm)
          返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。
static KeyPairGenerator getInstance(String algorithm, Provider provider)
          返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。
static KeyPairGenerator getInstance(String algorithm, String provider)
          返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。
 Provider getProvider()
          返回此密钥对生成器对象的提供者。
 void initialize(AlgorithmParameterSpec params)
          初始化密钥对生成器,使用指定参数集合,并使用以最高优先级安装的提供者的 SecureRandom 的实现作为随机源。
 void initialize(AlgorithmParameterSpec params, SecureRandom random)
          使用给定参数集合和随机源初始化密钥对生成器。
 void initialize(int keysize)
          初始化确定密钥大小的密钥对生成器,使用默认的参数集合,并使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。
 void initialize(int keysize, SecureRandom random)
          使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

KeyPairGenerator

protected KeyPairGenerator(String algorithm)
为指定的算法创建 KeyPairGenerator 对象。

参数:
algorithm - 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
方法详细信息

getAlgorithm

public String getAlgorithm()
返回此密钥对生成器算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。

返回:
算法的标准字符串名称。

getInstance

public static KeyPairGenerator getInstance(String algorithm)
                                    throws NoSuchAlgorithmException
返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。

此方法从首选 Provider 开始遍历已注册安全提供者列表。返回封装 KeyPairGeneratorSpi 实现的新 KeyPairGenerator 对象,该实现取自第一个支持指定算法的 Provider。

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

参数:
algorithm - 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
返回:
新的 KeyPairGenerator 对象。
抛出:
NoSuchAlgorithmException - 如果没有 Provider 支持指定算法的 KeyPairGeneratorSpi 实现。
另请参见:
Provider

getInstance

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

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

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

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

getInstance

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

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

参数:
algorithm - 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider - 提供者。
返回:
新的 KeyPairGenerator 对象。
抛出:
NoSuchAlgorithmException - 如果指定算法的 KeyPairGeneratorSpi 实现不能从指定提供者对象获得。
IllegalArgumentException - 如果指定提供者为 null。
从以下版本开始:
1.4
另请参见:
Provider

getProvider

public final Provider getProvider()
返回此密钥对生成器对象的提供者。

返回:
返回此密钥对生成器对象的提供者

initialize

public void initialize(int keysize)
初始化确定密钥大小的密钥对生成器,使用默认的参数集合,并使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

参数:
keysize - 密钥大小。它是特定于算法的度量(如模长度),以位数为单位指定。
抛出:
InvalidParameterException - 如果 keysize 不受此 KeyPairGenerator 对象支持。

initialize

public void initialize(int keysize,
                       SecureRandom random)
使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器。

指定者:
KeyPairGeneratorSpi 中的 initialize
参数:
keysize - 密钥大小。它是特定于算法的度量(如模长度),以位数为单位指定。
random - 随机源。
抛出:
InvalidParameterException - 如果 keysize 不受此 KeyPairGenerator 对象支持。
从以下版本开始:
1.2

initialize

public void initialize(AlgorithmParameterSpec params)
                throws InvalidAlgorithmParameterException
初始化密钥对生成器,使用指定参数集合,并使用以最高优先级安装的提供者的 SecureRandom 的实现作为随机源。(如果任何安装的提供者都不提供 SecureRandom 的实现,则使用系统提供的随机源。)

已将此具体方法添加到以前定义的这个抽象类中。此方法调用 KeyPairGeneratorSpi 的 initialize 方法,为它传递 params 和随机源(从以最高优先级安装的提供者获得;如果任何已安装的提供者都不能提供,则由系统提供)。如果没有被提供者重写,则该 initialize 方法总是抛出 UnsupportedOperationException。

参数:
params - 用于生成密钥的参数集合。
抛出:
InvalidAlgorithmParameterException - 如果给定的参数不适合此密钥对生成器。
从以下版本开始:
1.2

initialize

public void initialize(AlgorithmParameterSpec params,
                       SecureRandom random)
                throws InvalidAlgorithmParameterException
使用给定参数集合和随机源初始化密钥对生成器。

已将此具体方法添加到以前定义的这个抽象类中。此方法调用 KeyPairGeneratorSpi 的 initialize 方法,为它传递 paramsrandom。如果没有被提供者重写,则该 initialize 方法总是抛出 UnsupportedOperationException。

覆盖:
KeyPairGeneratorSpi 中的 initialize
参数:
params - 用于生成密钥的参数集合。
random - 随机源。
抛出:
InvalidAlgorithmParameterException - 如果给定的参数不适合此密钥对生成器。
从以下版本开始:
1.2

genKeyPair

public final KeyPair genKeyPair()
生成密钥对。

如果此 KeyPairGenerator 没有被显式初始化,特定于提供者的默认值将用于所生成密钥的大小和其他(特定于算法的)值。

每次调用此方法都将生成新的密钥对。

此方法在功能上等同于 generateKeyPair

返回:
生成的密钥对
从以下版本开始:
1.2

generateKeyPair

public KeyPair generateKeyPair()
生成一个密钥对。

如果此 KeyPairGenerator 没有被显式初始化,特定于提供者的默认值将用于所生成密钥的大小和其他(特定于算法的)值。

每次调用此方法都将生成新的密钥对。

此方法在功能上等同于 generateKeyPair

指定者:
KeyPairGeneratorSpi 中的 generateKeyPair
返回:
生成的密钥对