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类实现加密与解密算法。