哈希算法的要求:
1.通過哈希值不能反向推導(dǎo)出原始數(shù)據(jù)(所以哈希算法也叫單向哈希算法)
2.對于輸入數(shù)據(jù)非常敏感,及時更改了一個比特位情臭,哈希值也大不相同
3.散列沖突的概率要小仇祭,
4.執(zhí)行效率要高骡湖,及時很長的文本,也能盡快計(jì)算出哈希值
MD5的結(jié)果是128位 --> 32個16進(jìn)制串
應(yīng)用:
安全加密
最常用于加密的哈希算法是 MD5(MD5 Message-Digest Algorithm耳峦,MD5 消息摘要算法)和 SHA(Secure Hash Algorithm,安全散列算法)
字典攻擊
通過拿到加密后的密文然后再字典表(彩虹表)中比對焕毫,找到相同的密文則可以知道其明文蹲坷。
可以通過在用戶的密碼后加鹽(加入一個字符串)然后加密存儲起來。
區(qū)塊鏈對哈希算法的應(yīng)用
區(qū)塊鏈?zhǔn)且粔K塊區(qū)塊組成的邑飒,每個區(qū)塊分為兩部分:區(qū)塊頭和區(qū)塊體循签。
區(qū)塊頭保存著 自己區(qū)塊體 和 上一個區(qū)塊頭 的哈希值。
因?yàn)檫@種鏈?zhǔn)疥P(guān)系和哈希值的唯一性幸乒,只要區(qū)塊鏈上任意一個區(qū)塊被修改過懦底,后面所有區(qū)塊保存的哈希值就不對了。
區(qū)塊鏈?zhǔn)褂玫氖?SHA256 哈希算法罕扎,計(jì)算哈希值非常耗時聚唐,如果要篡改一個區(qū)塊,就必須重新計(jì)算該區(qū)塊后面所有的區(qū)塊的哈希值腔召,短時間內(nèi)幾乎不可能做到杆查。
一致性哈希算法
假設(shè)我們有 k 個機(jī)器,數(shù)據(jù)的哈希值的范圍是 [0, MAX]臀蛛。我們將整個范圍劃分成 m 個小區(qū)間(m 遠(yuǎn)大于 k)亲桦,每個機(jī)器負(fù)責(zé) m/k 個小區(qū)間。當(dāng)有新機(jī)器加入的時候浊仆,我們就將某幾個小區(qū)間的數(shù)據(jù)客峭,從原來的機(jī)器中搬移到新的機(jī)器中。這樣抡柿,既不用全部重新哈希舔琅、搬移數(shù)據(jù),也保持了各個機(jī)器上數(shù)據(jù)數(shù)量的均衡洲劣。