HASH摘要

首先從md5提及,通常新進入開發行業最早接觸的就是md5了,
md5本質上是一個hash(諧音:哈希)算法,能夠從一個大文件信息中提取出一小段信息,叫提取摘要,
有的地方也有提取指紋這種說法,其實指紋這個比喻很好,算法

md5(原始數據) = 摘要安全

hash算法的目的:一樣的一段數據經過hash函數老是獲得相同的摘要,不一樣的數據經過md5老是應該
獲得不一樣的摘要函數

爲何須要摘要:
一個很常見的使用場景是在會員系統上,網站爲了安全通常不會存儲用戶的登錄密碼,
那爲咱們在登錄的時候網站怎麼知道咱們的密碼是對的呢?答案就是hash,好比你在
註冊的時候密碼填寫的 123456,系統將你的密碼進行hash,最後的結果多是
e10adc3949ba59abbe56e057f20f883e,會員系統就是存的這一串字符,當你下次
登錄的時候,你輸入123456,系統仍是用原來那套hash算法,得出一串字符,和系統以前存
的字符串對比,若是同樣,說明密碼正確。網站

hash算法目的那一行有一個關鍵詞「應該」,hash的目的是理想化的,無論什麼hash算法實際
上總有特別小的機率會出現不一樣的原始數據經過hash函數可能會獲得相同的結果,
因此:越好的hash算法會將這個機率降到越低
這個機率越低,黑客要經過手段碰撞出相同摘要的難度就越大
常見的md5他的安全性其實不高,黑客很容易就能夠利用彩虹表進行md5碰撞來生成相同的摘要,加密

因此如今市面上的系統在使用md5的時候一般會有加鹽操做,spa

md5(原始數據+salt) = 摘要md5

由於混入了salt,安全性進一步獲得提高開發

細心的讀者可能發現了,我上面一直說的摘要和哈希,並無提到加密,那麼md5屬不屬於加密呢?字符串

由md5+salt 繼續延伸一下其實就是 HS256 (Hmac + Sha256)
sha256和md5的功能同樣,可是比md5更加安全hash

HS256(原始數據,key) = 摘要

這裏的key就和salt做用相同
一樣的問題,HS256屬於加密嗎?
答案是: 否,上面的都不屬於加密,而是摘要,或者說指紋

什麼叫加密,一個數據經過一個算法加密,能夠經過相反的算法解密,而摘要只能單方向的的’加密‘,不能逆向解密,因此不屬於加密,可是摘要在某些狀況下確實有加密的效果,並且摘要和加密一般緊密結合,好比要對一個大文件進行加密,可是這些加密函數都不支持這麼大的文件,怎麼辦?這個時候就須要用hash函數先提取摘要,在對摘要進行加密來達到一樣的效果

相關文章
相關標籤/搜索