秘钥 Key,分为对称密钥和非对称密钥
对称秘钥 SecretKey,由KeyGenerator生成
非对 PrivateKey,PublicKey,由KeyPairGenerator生成
KeyFactory(SecretKeyFactory)也可生成秘钥,可以将秘钥转换为外部表示如字节数组,秘钥规范(Key Spec)等
一个KeySpec对应一个Key
KeyFactory 秘钥,秘钥规范转换
DSAPrivateKeySpec spec = xx;
KeyFactory kf = KeyFactory.getInstance("DSA");
PrivateKey pk = kf.generatePrivateKey(spec);
PrivateKey key = xx;
Class sp = Class.forName("java.security.spec.DSAPrivateKeySpec");
DSAPrivateKeySpec spec = (DSAPrivateKeySpec ) kf.getKeySpec(key, sp);
消息摘要算法
用于标识消息未被改写,主要有 MD,SHA,MAC三大系列算法
MAC算法相比MD,SHA,多了个密钥,MD,SHA可以防止明文被改写,但不能防止消息摘要也被改写
MAC解决了这个问题
对称加密算法
主要算法有AES,DES,DESede
Cipher cipher = Cipher.getInstance("DES")
cipher.init(Cipher.ENCRYT_MODE, key)
cipher.doFinal(data)
非对称加密算法
主要算法RSA
使用私钥加密的数据,需使用公钥解密
使用公钥加密的数据,需使用私钥解密
使用KeyPairGenerator产生密钥对,然后使用Cipher加解密
数字签名算法
主要算法 RSA, DSA, ECDSA
数字签名算法要求验证数据完整性,认证数据来源,并起到抗否认的作用
,其实现由消息摘要算法和非对称加密算法结合而成
消息摘要用于验证数据完整性
非对称加密算法用于验证数据来源,抗否认
私钥用于签名,公钥用于验证
签名
Sinature sinature = Sinature.getInstance("MD5withRSA")
sinature.initSign(privateKey);
sinature.update(data)
byte[]sign = sinature.sign();
验证
Sinature sinature = Sinature.getInstance("MD5withRSA")
sinature.initVerify(publicKey)
sinature.update(data) #这里的data和 签名的data是同一个对象
boolean status = sinature.verify(sign);
数字证书
数字证书包含了消息摘要算法,加解密算法,数字签名算法
密钥库 KeyStore
证书 X509Certificate