3.2.6 Key

Key接口是所有密钥接口的顶层接口,一切与加密解密有关的操作都离不开Key接口。


/模型化密钥的概念。由于密钥必须在不同实体之间传输,因此所有的密钥都必须是可以序列化的。/

public interface Key

extends Serializable


❑方法详述

所有的密钥都具有三个特征:

·算法

这里指的是密钥的算法,如DES和DSA等,通过getAlgorithm()方法可获得算法名。

·编码形式

这里指的是密钥的外部编码形式,密钥根据标准格式(如X.509 SubjectPublicKeyInfo或PKCS#8)编码,使用getEncoded()方法可获得编码格式。

·格式

这里指的是已编码密钥的格式的名称,使用getFormat()方法可获得格式。

对应上述三个特征,Key接口提供如下三个方法:


//返回此密钥的标准算法名称。

public String getAlgorithm()

/返回基本编码格式的密钥,通常为二进制格式,如果此密钥不支持编码,则返回null。/

public byte[]getEncoded()

//返回此密钥的基本编码格式,如果此密钥不支持编码,则返回null。

public String getFormat()


SecretKey、PublicKey、PrivateKey三大接口继承于Key接口,定义了对称密钥和非对称密钥接口。

1.SecretKey

SecretKey(javax. crypto.SecretKey)接口是对称密钥顶层接口。DES、AES等多种对称密码算法密钥均可通过该接口提供,PBE(javax.crypto.interfaces.PBE)接口提供PEB算法定义并继承了该接口。Mac算法实现过程中,通过SecretKey接口提供秘密密钥。通常使用的是SecretKey接口的实现类SecretKeySpec(javax.crypto.spec.SecretKeySpec)。


//秘密(对称)密钥

public interface SecretKey

extends Key


2.PublicKey和PrivateKey

PublicKey、PrivateKey接口是非对称密钥顶层接口。


//公钥

public interface PublicKey

extends Key

//私钥

public interface PrivateKey

extends Key


DH、RSA、DSA和EC等多种非对称密钥接口均继承了这两个接口。RSA、DSA、EC接口均在java.security.interfaces包中。DH的密钥接口位于javax.crypto.interfaces包中。有关于java.security.interfaces包和javax.crypto.interfaces包本章不做细节介绍,有兴趣的读者可以关注相应的Java API内容。