1. 程式人生 > >MD5 加密演算法詳細介紹

MD5 加密演算法詳細介紹

MD5是什麼

message-digest algorithm 5(資訊-摘要演算法)。經常說的“MD5加密”,就是它→資訊-摘要演算法。

在下載一下東西時,經常在一些壓縮包屬性裡,看到md5值。而且這個下載頁面,很可能會在某一個地方,寫了一句,此檔案的MD5值為XXXXXXXXX。這有什麼作用呢?

白話白話:md5,其實就是一中演算法。可以將一個字串,或檔案,或壓縮包,執行md5後,就可以生成一個固定長度為128bit的串。這個串,基本上是唯一的。

所以,有人修過壓縮包後,就會生成新的串,這時就可以拿網站提供的串和新生成的串對比,如果不同,那就是被人修過過了。

加密和摘要,是不一樣的

加密後的訊息是完整的;具有解密演算法,得到原始資料;

摘要得到的訊息是不完整的;通過摘要的資料,不能得到原始資料;

所以,當看到很多人說,md5,加密,解密的時候,呵呵一笑就好了。

QQ截圖20150311162809

MD5長度

有人說md5,128位,32位,16位,到底md5多長?

md5的長度,預設為128bit,也就是128個0和1的二進位制串。

這樣表達是很不友好的。

所以將二進位制轉成了16進位制,每4個bit表示一個16進位制,

所以128/4 = 32 換成16進製表示後,為32位了。

QQ截圖20150305111855

為什麼網上還有md5是16位的呢?

網上有很多帖子,md5 32位 16位 加密 區別。

仔細觀察admin生成的32位和16位的md5值……

查詢結果:

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

md5(admin,16) = 7a57a5a743894a0e

看出來了吧!

其實16位的長度,是從32位md5值來的。是將32位md5去掉前八位,去掉後八位得到的。

MD5的作用

①一致性檢驗,最上面那個例子

②數字簽名,還是最上面那個例子。只是把md5看出了一個指紋,按了個手印說明獨一無二了。

③安全訪問認證,這個就是平時系統設計的問題了。

在使用者註冊時,會將密碼進行md5加密,存到資料庫中。這樣可以防止那些可以看到資料庫資料的人,惡意操作了。

md5不能破解嗎?

md5是不可逆的,也就是沒有對應的演算法,從生產的md5值逆向得到原始資料。

但是如果使用暴力破解,那就另說了。

md5是唯一的嗎?

md5作為資料庫中的主鍵可行嗎?這就涉及到一個問題,md5值是唯一的嗎?答案是,不唯一。

也就是一個原始資料,只對應一個md5值;

但是一個md5值,可能對應多個原始資料。

java中生成MD5的值

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 public class MD5Test { //main測試類 public static void main(String[] args) { String result = getMD5("aaa"); System.err.println(result); }