祕鑰 Key,分爲對稱密鑰和非對稱密鑰java
對稱祕鑰 SecretKey,由KeyGenerator生成web
非對 PrivateKey,PublicKey,由KeyPairGenerator生成算法
KeyFactory(SecretKeyFactory)也可生成祕鑰,能夠將祕鑰轉換爲外部表示如字節數組,祕鑰規範(Key Spec)等數組
一個KeySpec對應一個Key加密
KeyFactory 祕鑰,祕鑰規範轉換spa
DSAPrivateKeySpec spec = xx;orm
KeyFactory kf = KeyFactory.getInstance("DSA");對象
PrivateKey pk = kf.generatePrivateKey(spec);ip
PrivateKey key = xx;ci
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