3.4.3 SecretKeySpec

SecretKeySpec类是KeySpec接口的实现类,用于构建秘密密钥规范。可根据一个字节数组构造一个SecretKey,而无须通过一个(基于provider的)SecretKeyFactory。


//此类以与provider无关的方式指定一个密钥。

public class SecretKeySpec

extends Object

implements KeySpec, SecretKey


此类仅对能表示为一个字节数组并且没有任何与之相关联的密钥参数的原始密钥有用,如DES或Triple DES密钥。

❑方法详述

可以通过下述方法构建一个实例化对象:


/根据给定的字节数组构造一个密钥,使用key中的始于且包含offset的前len个字节。/

public SecretKeySpec(byte[]key, int offset, int len, String algorithm)

//根据给定的字节数组构造一个密钥。

public SecretKeySpec(byte[]key, String algorithm)


SecretKeySpec还覆盖了以下方法:


//测试给定对象与此对象的相等性。

public boolean equals(Object obj)

//算此对象的散列码值。

public int hashCode()


此外,SecretKeySpec还提供了如下方法:


//返回与此密钥相关联的算法的名称。

public String getAlgorithm()

//返回此密钥的密钥内容。

public byte[]getEncoded()

//返回此密钥编码格式的名称。

public String getFormat()


❑实现示例

我们先获得RC2算法的密钥字节数组:


//实例化KeyGenerator对象,并指定RC2算法。

KeyGenerator kg=KeyGenerator.getInstance("RC2"));

//生成SecretKey对象。

SecretKey secretKey=kg.generateKey();

//获得密钥编码字节数组。

byte[]key=secretKey.getEncoded();


在得到密钥编码字节数组后,我们将通过如下方法还原秘密密钥对象:


//实例化SecretKey对象。

SecretKey secretKey=new SecretKeySpec(key,"RC2");