JCA 实践记录——KeyFactory

KeyFactory(密钥工厂)用对密钥(Key类型的不透明密钥)和密钥规范(KeySpec类型的底层密钥密钥材料的透明表示)进行相互转换;也就是密钥工厂是双向的,可以把Key转换成KeySpec,也可以把KeySpec转换成Key。另外对于同一个密钥可以存在多个兼容的密钥规范。

SecretKeyFactoryKeyFactory的不同在于:KeyFactory用于非对称密钥加密时的密钥转换,而 SecretKeyFactory 用于对称密钥加密时的密钥转换。

  1. Key:不透明的底层密钥,用于程序中的各个加密、解密、签名、验签等算法的使用。
  2. KeySpec:底层密钥的透明表示,可用于密钥的存储,交换等。

程序生成的Key要进行存储和交换,必须要先转换成KeySpec;而在持久化设备中存储的或在网络中传输的密钥也必须经过KeySpec才能被转换成Key最终供应用中的加密、解密、签名、验签等算法使用。

实例化

KeyFactory 没有公开的构造方法,只能使用 getInstance方法进行实例化。这个方法有多个重载如下:

public static KeyFactory getInstance(String algorithm)
        throws NoSuchAlgorithmException;


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


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

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

可用方法

generatePrivate

public final PrivateKey generatePrivate(KeySpec keySpec)
        throws InvalidKeySpecException

根据给定的KeySpec对象,生成PrivateKey(私钥)对象。

generatePublic

public final PublicKey generatePublic(KeySpec keySpec)
        throws InvalidKeySpecException

根据给定的KeySpec对象,PublicKey(生成公钥)对象。

getKeySpec

public final  T getKeySpec(Key key, Class keySpec)
        throws InvalidKeySpecException

参数中给定的Key是待转换的密钥,而Class是需要转换成的目标KeySpec类。
此方法就是要把给定的Key对象转换成目标KeySpec类对象。

translateKey

public final Key translateKey(Key key) throws InvalidKeyException 

将密钥对象(其提供程序可能是未知的或可能不受信任的)转换为此密钥工厂的相应密钥对象。

支持的算法:

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

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