摘要:消息摘要的概念對消息通過一個單向算法進行計算,得到一個唯一的結果。每個消息對應一個唯一結果,所有結果的長度固定。消息摘要的分類消息摘要算法安全散列算法消息認證碼算法,結合了和的優勢,同時用密鑰對摘要進行加密,是一種更為安全的消息摘要算法。
消息摘要的概念
消息摘要的分類對消息通過一個單向Hash算法進行計算,得到一個唯一的結果。每個消息對應一個唯一結果,所有結果的長度固定。
(1)MD5(Message Digest)消息摘要算法
(2)SHA(Secure Hash Algorithm)安全散列算法
(3)MAC(Message Authentication Code)消息認證碼算法,結合了MD5和SHA的優勢,同時用密鑰對摘要進行加密,是一種更為安全的消息摘要算法。
編程使用校驗數據的完整性,防止在傳輸途中被篡改
import java.io.File; import java.io.FileInputStream; import java.security.DigestInputStream; import java.security.MessageDigest; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class MessageDigestUtil { /** * 計算MD5值 */ public static String encryptMD5(byte[] data) throws Exception { MessageDigest messageDigest = MessageDigest.getInstance("MD5");//MD5,MD2 messageDigest.update(data); return BytesToHex.fromBytesToHex(messageDigest.digest()); } /** * 計算文件的MD5值(指紋簽名) */ public static String getFileMD5(String path) throws Exception { FileInputStream fis = new FileInputStream(new File(path)); DigestInputStream dis = new DigestInputStream(fis, MessageDigest.getInstance("MD5")); try { byte[] buffer = new byte[1024]; int read = dis.read(buffer, 0, 1024); while (read != -1) { read = dis.read(buffer, 0, 1024); } MessageDigest md = dis.getMessageDigest(); return BytesToHex.fromBytesToHex(md.digest()); } finally { dis.close(); fis.close(); } } /** * 計算SHA值 */ public static String encryptSHA(byte[] data) throws Exception { MessageDigest messageDigest = MessageDigest.getInstance("SHA");//SHA,SHA1,SHA-1,SHA-256,SHA-384,SHA-512 messageDigest.update(data); return BytesToHex.fromBytesToHex(messageDigest.digest()); } /** * 初始化HMAC密鑰 */ public static byte[] initHmacKey() throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacSHA512");//HmacMD5,HmacSHA1,HmacSHA256,HmacSHA384,HmacSHA512 return keyGenerator.generateKey().getEncoded(); } /** * 使用Hmac生成的密鑰對數據進行加密 */ public static String encryptHmac(byte[] data, byte[] key) throws Exception { SecretKey secretKey = new SecretKeySpec(key, "HmacSHA512"); Mac mac = Mac.getInstance("HmacSHA512"); mac.init(secretKey); return BytesToHex.fromBytesToHex(mac.doFinal(data)); } public static void main(String[] args) throws Exception { String data = "123456"; String path = "/Users/admin/Downloads/httpd-2.4.20.tar.gz"; System.out.println(data + " 的MD5值: " + MessageDigestUtil.encryptMD5(data.getBytes())); System.out.println(path + " 的文件MD5簽名: " + MessageDigestUtil.getFileMD5(path)); System.out.println(data + " 的SHA值: " + MessageDigestUtil.encryptSHA(data.getBytes())); byte[] hmacKey = initHmacKey(); System.out.println("初始化Hmac密鑰:" + BytesToHex.fromBytesToHex(hmacKey)); System.out.println(data + " 是的Hmac加密值為: " + MessageDigestUtil.encryptHmac(data.getBytes(), hmacKey)); } }
public class BytesToHex { public static String fromBytesToHex(byte[] resultBytes) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < resultBytes.length; i++) { if (Integer.toHexString(0xFF & resultBytes[i]).length() == 1) { builder.append("0").append( Integer.toHexString(0xFF & resultBytes[i])); } else { builder.append(Integer.toHexString(0xFF & resultBytes[i])); } } return builder.toString(); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65200.html
時間:2017年4月10日星期一說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 Java實現消息摘要算法加密 消息摘要算法 MD(Message Digest) SHA(Secure H...
摘要:加解密偽代碼加密解密非對稱加密又稱公開秘鑰加密。常見的非對稱加密算法。通常來說對稱加密速度要快于非對稱加密。在之后的通訊階段,可以使用對稱加密算法對數據進行加密,秘鑰則是握手階段生成的。確認信息完整未被篡改。 一、 文章概述 互聯網時代,網絡上的數據量每天都在以驚人的速度增長。同時,各類網絡安全問題層出不窮。在信息安全重要性日益凸顯的今天,作為一名開發者,需要加強對安全的認識,并通過技...
摘要:還有很多開發者沒有意識到的加密算法的問題。不要使用哈希函數做為對稱加密算法的簽名。開發者建議使用基于口令的加密算法時,生成密鑰時要加鹽,鹽的取值最好來自,并指定迭代次數。不要使用沒有消息認證的加密算法加密消息,無法防重放。 本文作者:阿里移動安全@伊樵,@舟海 Android開發中,難免會遇到需要加解密一些數據內容存到本地文件、或者通過網絡傳輸到其他服務器和設備的問題,但并不是使用了加...
閱讀 2214·2021-11-25 09:43
閱讀 1178·2021-11-23 09:51
閱讀 3512·2021-11-23 09:51
閱讀 3638·2021-11-22 09:34
閱讀 1575·2021-10-09 09:43
閱讀 2136·2019-08-30 15:53
閱讀 3173·2019-08-30 14:07
閱讀 580·2019-08-28 18:14