3.3.4 SecretKeyFactory
SecretKeyFactory类同样属于引擎类,与KeyFactory类相对应,它用于产生秘密密钥,我们称它为秘密密钥工厂。
//此类表示秘密密钥的工厂。
public class SecretKeyFactory
extends Object
❑方法详述
既然SecretKeyFactory类也是一个引擎类,那同样需要通过getInstance()工厂方法来实例化对象。
我们可以通过制定算法名称的方式获得秘密密钥实例化对象,方法如下所示:
//返回转换指定算法的秘密密钥的SecretKeyFactory对象。
public final static SecretKeyFactory getInstance(String algorithm)
或者,指定算法名称的同时制定该算法的提供者,方法如下所示:
//返回转换指定算法的秘密密钥的SecretKeyFactory对象。
public final static SecretKeyFactory getInstance(String algorithm, Provider provider)
//返回转换指定算法的秘密密钥的SecretKeyFactory对象。
public final static SecretKeyFactory getInstance(String algorithm, String provider)
算法生成器共有两种初始化方式:与算法无关的方式或特定于算法的方式。
得到SecretKeyFactory实例化对象后,我们就可以通过以下方法来生成秘密密钥:
//根据提供的密钥规范(密钥材料)生成SecretKey对象。
public final SecretKey generateSecret(KeySpec keySpec)
此外,还可以使用如下方法转换秘密密钥:
/将一个密钥对象(其提供者未知或可能不受信任)转换为此SecretKeyFactory的相应密钥对象。/
public final SecretKey translateKey(SecretKey key)
此外,可以使用如下方法获得秘密密钥的密钥规范:
//以输入参数的格式返回给定密钥对象的规范(密钥材料)。
public final KeySpec getKeySpec(SecretKey key, Class keySpec)
与其他引擎类一样,SecretKeyFactory类提供以下两种方法:
//返回此秘密密钥工厂对象的提供者。
public final Provider getProvider()
//返回此秘密密钥工厂对象的算法名称。
public final String getAlgorithm()
❑实现示例
我们通过以下代码获得秘密密钥的密钥编码字节数组:
//实例化KeyGenerator对象,并指定DES算法。
KeyGenerator keyGenerator=KeyGenerator.getInstance("DES");
//生成SecretKey对象
SecretKey secretKey=keyGenerator.generateKey();
//获得秘密密钥的密钥编码字节数组。
byte[]key=secretKey.getEncoded();
得到上述密钥编码字节数组后,我们就可以还原其秘密密钥对象:
//由获得的密钥编码字节数组构建DESKeySpec对象。
DESKeySpec dks=new DESKeySpec(key);
//实例化SecretKeyFactory对象
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance("DES");
//生成SecretKey对象
SecretKey secretKey=keyFactory.generateSecret(dks);
至此,我们完成了Java平台中有关密钥构建Java API学习。在3.3.5节中,我们将详述如何使用Cipher类实现加密与解密算法。