1. 介紹
在實際開發中,我們會經常用到一些不可逆的加密算法,例如:MD5算法、SHA1算法、信息摘要算法,還有哈希算法等等。如果沒有好好學習一些,真得會搞混的。所以我查找了相關資料,在這裏簡單介紹一下。
消息摘要算法分爲三類:
- MD(Message Digest):消息摘要
- SHA(Secure Hash Algorithm):安全散列
- HMAC(Hash-based Message Authentication Code):散列消息認證碼
這三類算法的主要作用:數據加密和驗證數據的完整性。
這裏提供一個在線工具:http://tool.oschina.net/encrypt?type=2
2. MD
生成的消息摘要都是128位的,包括:MD2、MD4、MD5。從安全性上來說,MD5 > MD4 > MD2。
3. SHA
安全散列算法(英語:Secure Hash Algorithm,縮寫爲SHA,也有稱爲哈希算法)是一個密碼散列函數家族,是FIPS所認證的安全散列算法。能計算出一個數字消息所對應到的,長度固定的字符串(又稱消息摘要)的算法。且若輸入的消息不同,它們對應到不同字符串的機率很高。包括:SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)。
4. HMAC
密鑰散列消息認證碼(英語:Keyed-hash message authentication code),又稱散列消息認證碼(Hash-based message authentication code,縮寫爲HMAC),是一種通過特別計算方式之後產生的消息認證碼(MAC),使用密碼散列函數,同時結合一個加密密鑰。包括:HmacMD2、HmacMD4、HmacMD5、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512。
5. 總結
這裏只是簡單介紹一下這三類算法的基本內容,對於算法的具體實現沒有涉及到,如果想了解具體實現的朋友,那隻能另外找資料了。我自己封裝了一個工具類,感興趣的可以到我的GitHub上面看看 CryptoHelper,具體使用方式請看這個BlogDemo。
這裏提供一個在線工具:http://tool.oschina.net/encrypt?type=2,方便大家驗證。不過這裏說明一下,不知道什麼原因,我封裝的工具類中的HmacSHA224和HmacSHA384這兩個算法的加密結果跟這個在線工具不一樣。我初步估計可能是JDK的內部實現問題。
如果想進一步交流和學習的同學,可以加一下QQ羣哦!