什么是哈希算法
將任意長(zhǎng)度的二進(jìn)制值串映射成固定長(zhǎng)度的二進(jìn)制值串他匪,這個(gè)映射規(guī)則就是哈希算法黎烈,而通過(guò)原始數(shù)據(jù)映射之后得到的二進(jìn)制值串就是哈希值灌诅。
哈希算法的幾點(diǎn)要求
- 單向性
從哈希值不能推出原始數(shù)據(jù)
- 雪崩性
對(duì)輸入數(shù)據(jù)非常敏感絮宁,哪怕原始數(shù)據(jù)只修改了一個(gè) Bit按傅,最后得到的哈希值也有接近一半的位數(shù)發(fā)生變化
- 抗弱碰撞性
散列沖突的概率非常小捉超,之所以不能說(shuō)是完全不沖突,鴿巢原理解釋了這一點(diǎn)唯绍。
- 高效性
能快速計(jì)算出輸入數(shù)據(jù)的哈希值
應(yīng)用
一拼岳、安全加密
對(duì)于加密的哈希算法來(lái)說(shuō),有兩點(diǎn)格外重要:
- 不可逆推性
不過(guò)不必追求絕對(duì)不可逆推况芒,只要達(dá)到足夠的不可逆推要求即可惜纸。
- 抗碰撞性
這個(gè)要盡可能追求,只要幾率極小即可,無(wú)法做到絕對(duì)耐版,畢竟上面說(shuō)過(guò)了鴿巢原理說(shuō)明了不存在絕對(duì)的兩個(gè)不同輸入不產(chǎn)生相同的輸出祠够。
二、唯一標(biāo)識(shí)
比如根據(jù)哈希值查找?guī)熘惺欠褚呀?jīng)有了相同的圖片椭更、視頻哪审。git 中也使用了 SHA 來(lái)標(biāo)識(shí)文件版本和追蹤文件。
三虑瀑、數(shù)據(jù)校驗(yàn)
CRC 算法其實(shí)就是一種保證數(shù)據(jù)安全哈希數(shù)據(jù)校驗(yàn)湿滓。。舌狗。實(shí)際中叽奥,我們也可以在 BT 協(xié)議中使用哈希算法對(duì)每塊數(shù)據(jù)進(jìn)行數(shù)據(jù)校驗(yàn),只保存正確數(shù)據(jù)塊痛侍。
四朝氓、散列函數(shù)
作為哈希表的散列函數(shù),它直接決定了散列沖突的概率和散列表的性能主届。
相對(duì)于哈希函數(shù)的其他應(yīng)用赵哲,散列函數(shù)的要求比較低,即使出現(xiàn)個(gè)別散列沖突君丁,只要不太嚴(yán)重枫夺,也是可以開放尋址法和鏈表法解決的。
散列函數(shù)更關(guān)注一組數(shù)據(jù)能否均勻分布在各個(gè)槽中和計(jì)算哈希值的效率绘闷。