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内容。