概述:
消息摘要:唯一對應(yīng)一個消息或文本的固定長度的值,是一個單向由Hash加密函數(shù)對消息作用而產(chǎn)生的。
分類:
1.MD(Message Digest)算法的編程使用
2.SHA算法的編程使用
3.HMAC算法的編程使用
作用: 驗證消息的完整性防止在運輸途中被串改淑趾。
一.MD算法的編程使用
1.初始化
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
2.更新
messageDigest.update(byte[] b);
3.生成摘要
byte[] result = messageDigest.digest();
4.字節(jié)數(shù)組轉(zhuǎn)16進制字符串
二.SHA算法的編程使用
1.初始化
// SHA-256 , SHA-386,SHA-512
MessageDigest messageDigest = MessageDigest.getInstance("SHA");
2.更新
messageDigest.update(byte[] b);
3.生成摘要
byte[] result = messageDigest.digest();
4.字節(jié)數(shù)組轉(zhuǎn)16進制字符串
三.HMAC算法的編程使用
MD算法和SHA算法缺點容易被篡改所以就有了HMAC
HMAC融合了MD 和SHA加入了秘鑰的支持
1.生成秘鑰
1.1 初始化
KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
1.2 生產(chǎn)秘鑰
SecretKey secretKey = keyGen.generateKey();
1.3 得到秘鑰的字節(jié)數(shù)組
byte[] key = secretKey.getEncoded();
2.執(zhí)行摘要
2.1 從字節(jié)數(shù)組還原秘鑰
SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");
2.2 實例化Mac
Mac mac = Mac.getInstance("HmacMD5");
2.3 用秘鑰初始化Mac
mac.init(secretKey);
2.4 執(zhí)行消息摘要
byte[] result = mac.doFinal(data);