轉載:https://www.cnblogs.com/second-tomorrow/p/9129043.html
原文:md5加密原理簡單解釋
本文將通過漫畫的形式來通俗易懂的講述什么是MD5加密算法(Message Digest Algorithm MD5(中文名為消息摘要算法第五版)),MD5加密算法的底層原理以及MD5加密算法的破解算法方法。
摘要哈希生成的正確姿勢是什么樣呢?分三步:
1.收集相關業務參數,在這里是金額和目標賬戶。當然,實際應用中的參數肯定比這多得多,這里只是做了簡化。
2.按照規則,把參數名和參數值拼接成一個字符串,同時把給定的密鑰也拼接起來。之所以需要密鑰,是因為攻擊者也可能獲知拼接規則。
3.利用 MD5 算法,從原文生成哈希值。MD5 生成的哈希值是 128 位的二進制數,也就是 32 位的十六進制數。
第三方支付平台如何驗證請求的簽名?同樣分三步:
1.發送方和請求方約定相同的字符串拼接規則,約定相同的密鑰。
2.第三方平台接到支付請求,按規則拼接業務參數和密鑰,利用 MD5 算法生成 Sign。
3.用第三方平台自己生成的 Sign 和請求發送過來的 Sign 做對比,如果兩個 Sign 值一模一樣,則簽名無誤,如果兩個 Sign 值不同,則信息做了篡改。這個過程叫做驗簽。
[image]
[image]
[image]
MD5 算法底層原理:
[image]
簡單概括起來,MD5 算法的過程分為四步:處理原文,設置初始值,循環加工,拼接結果。
-
第一步:處理原文
首先,我們計算出原文長度(bit)對 512 求余的結果,如果不等於 448,就需要填充原文使得原文對 512 求余的結果等於 448。填充的方法是第一位填充 1,其余位填充 0。填充完后,信息的長度就是 512*N+448。
之后,用剩余的位置(512-448=64 位)記錄原文的真正長度,把長度的二進制值補在最后。這樣處理后的信息長度就是 512*(N+1)。
-
第二步:設置初始值
MD5 的哈希結果長度為 128 位,按每 32 位分成一組共 4 組。這 4 組結果是由 4 個初始值 A、B、C、D 經過不斷演變得到。MD5 的官方實現中,A、B、C、D 的初始值如下(16 進制):