JCA 实践记录——KeyPairGenerator

KeyPairGenerator 类用于在非对称密钥加密算法中生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法构造的。

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

实例化

KeyPairGenerator没有公开的构造方法,所以只能调用其静态方法getInstace进行实现化。这个方法有多个重载如下:

public static KeyPairGenerator getInstance(String algorithm)
        throws NoSuchAlgorithmException ;


public static KeyPairGenerator getInstance(String algorithm,String provider)
        throws NoSuchAlgorithmException, NoSuchProviderException


public static KeyPairGenerator getInstance(String algorithm, Provider provider) 
       throws NoSuchAlgorithmException 

我们通常使用的是public static KeyPairGenerator getInstance(String algorithm);此方法需要一个字符串作为参数,用于说明使用哪个密钥算法。

初始化

KeyPairGenerator的初始化方法有两类,具体的会在密钥对的生成方式中进行说明:

public void initialize(int keysize);

public void initialize(int keysize, SecureRandom random);

public void initialize(AlgorithmParameterSpec params)
        throws InvalidAlgorithmParameterException;

public void initialize(AlgorithmParameterSpec params,SecureRandom random)
    throws InvalidAlgorithmParameterException;

通常情况下我们使用public void initialize(int keysize);进行初始化就足够了。参数keysize用于说明生成的key的长度,理论上说是这个参数的值越大,加密的数据就越难以被破解,但在加密时也越消耗计算资源。

密钥对的生成方式

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

与算法无关的初始化

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

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

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

特定于算法的初始化

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

支持的算法:

  1. DiffieHellman
  2. DSA
  3. RSA
  4. EC

你可能感兴趣的:(JCA 实践记录——KeyPairGenerator)