你怕是对MD5算法有误解
大家常聽到“MD5加密”、“對稱加密”、“非對稱加密”,那么MD5屬于哪種加密算法?
面試官問這樣的問題,準是在給你挖坑。
"MD5加密"純屬口嗨,MD5不是加密算法,是摘要算法。
今天小碼甲帶大家梳理加密算法、摘要算法的定義和場景:
伸手黨先看答案:
加密算法的目的,在于使別人無法成功查看加密的數據,并且在需要的時候還可以對數據進行解密來重新查看數據。
而MD5算法是一種哈希算法,哈希算法的設計目的本身就決定了,它在大多數情況下都是不可逆的,即你通過哈希算法得到的數據,無法經過任何算法還原回去。所以既然不能將數據還原,也就不能稱之為解密;既然不能解密,那么哈希的過程自然也就不能稱作是[加密]了。
加密算法
加密:是以某種特殊的算法改變原有的信息,使得未授權的用戶即使獲得已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。
解密:加密的逆過程為解密,即將該加密信息轉化為其原來信息的過程。
加密算法分為對稱加密和非對稱加密,其中對稱加密算法的加解密密鑰相同,非對稱加解密的密鑰不同。
HTTPS就同時用到非對稱加密和對稱加密,在連接建立階段,使用非對稱加解密(保護密鑰不被查看), 在通信階段使用對稱密鑰加解密數據。
摘要算法
摘要算法,又稱哈希算法、散列算法。通過一個函數,將任意長度的內容轉換為一個固定長度的數據串。
摘要算法之所以能指出數據是否被篡改,就是因為摘要函數是一個單向函數,計算很容易,但通過摘要(digest) 反推data卻非常困難,而且,對于原始數據做一個bit的修改,都會導致計算出的摘要完全不同。
使用迅雷下載某片的時候,下載站會順帶給你一個MD5校驗碼;
你找一個MD5校驗工具,對下載下來的文件執行MD5算法,將得到的哈希值與下載站附帶的MD5值對比,如果值是相同的,說明從該網站下載的文件沒有損壞。
HMAC
延伸聊一個結合了密鑰和哈希功能的請求認證方案:
HMAC ( hash-based message authenticated code)
很多第三方平臺都采用這種授權認證方案,你回想一下,api平臺是不是經常給你一對AppID?Serect Key
1.Client & Server 都知曉一個私鑰serect key2.客戶端每次請求時,會針對(請求數據+ secret key)生成一個hash值
HMAC = hashFunc(secret key + message)3.客戶端將哈希值做為請求的一部分,一起發送4.當服務端收到請求, 對( 收到的請求+ 查到的Serectkey')生成哈希,將計算的哈希值與請求中附帶的原哈希值對比,如果相同,則認定請求來自受信Client,且請求未被篡改。
為什么會有這樣的效果?
首先:Client 和Server的哈希值相同,根據哈希算法的設計初衷,說明請求過程未被篡改;
另一方面也反推?Client 和Server使用的是同一個Serect Key?, 而Serect Key是私密信息,故此處的Client發送請求不可抵賴。
還可以考慮在客戶端生成哈希時加入timestamp時間戳(請求也要附帶這個時間戳),服務端收到后,先對比服務器時間戳與請求時間戳,限制15s內為有效請求,服務端再對(請求消息+ serect key+ timestamp)生成哈希,對比哈希,避免重放攻擊。
總結
本文給出的示例:HTTPS、迅雷MD5校驗,足夠幫助你了解加密算法和摘要算法的設計目的。
?加密算法的目的是:防止信息被偷看?摘要算法的目的是:防止信息被篡改
以后使用時候也能有的放矢,面試時也不會鬧出笑話。
最后給出的WebAPI授權方案HMAC,算是密鑰+哈希算法結合的一個應用場景, 具備快速、自簽名的特點。
本號內容極其硬核,閱讀和關注不是目的,更希望得到的是閱讀反饋,互相促進認知的提升(相當真誠??)
今天因為你的點贊,讓我元氣滿滿!
總結
以上是生活随笔為你收集整理的你怕是对MD5算法有误解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入LINQ | 揭开IQueryabl
- 下一篇: 开源基金会为何辟谣 鸿蒙背后有何玄机