? ??散列函數(shù)(英語:Hash function)又稱散列算法胀葱、哈希函數(shù)迫横,是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法腌巾。散列函數(shù)把消息或數(shù)據(jù)壓縮成摘要,使得數(shù)據(jù)量變小啄刹,將數(shù)據(jù)的格式固定下來吉挣。該函數(shù)將數(shù)據(jù)打亂混合蜀备,重新創(chuàng)建一個叫做散列值(hash values删咱,hash codes,hash sums虏杰,或hashes)的指紋讥蟆。散列值通常用一個短的隨機字母和數(shù)字組成的字符串來代表。
????所有散列函數(shù)都有如下一個基本特性:如果兩個散列值是不相同的(根據(jù)同一函數(shù))纺阔,那么這兩個散列值的原始輸入也是不相同的瘸彤。這個特性是散列函數(shù)具有確定性的結(jié)果,具有這種性質(zhì)的散列函數(shù)稱為單向散列函數(shù)笛钝。但另一方面质况,散列函數(shù)的輸入和輸出不是唯一對應(yīng)關(guān)系的,如果兩個散列值相同玻靡,兩個輸入值很可能是相同的结榄,但也可能不同,這種情況稱為“散列碰撞(collision)”囤捻,這通常是兩個不同長度的輸入值臼朗,刻意計算出相同的輸出值。輸入一些數(shù)據(jù)計算出散列值蝎土,然后部分改變輸入值视哑,一個具有強混淆特性的散列函數(shù)會產(chǎn)生一個完全不同的散列值。
? ? 應(yīng)用:
????1誊涯、驗證兩段信息是否相同挡毅。
????????A使用QQ給B傳了一個文件,這個文件會在QQ的服務(wù)器上保存下來暴构。如果C也傳了這個文件給D跪呈,QQ會對比這個文件的哈希值和A傳給B的文件的哈希值是否相同,如果相同則說明是同一個文件取逾,C就不需要再一次上傳文件給服務(wù)器耗绿。這就是所謂的秒傳。
????????一個壓縮包在傳輸?shù)臅r候可能會有損壞砾隅。在壓縮之前計算原文件的哈希值并放入壓縮包中缭乘,待解壓后再次計算解壓文件的哈希值。對比壓縮包中的哈希值則可以知道文件是否損壞。BT和迅雷下載中所謂的哈希驗證也是同一道理堕绩。
????2、驗證某人是否信息持有者邑时。
????????在一個論壇注冊帳號奴紧,如果論壇把密碼保存起來,因為無論壇多么安全都可能會被破解晶丘,所以密碼總會有泄漏的可能性黍氮。????
????????如果不保存密碼而保存密碼的哈希加密值。當(dāng)你下次登陸論壇的時候浅浮,將你輸入的密碼的哈希值和你注冊時密碼的哈希值比對沫浆,如果相同則可以證明你就是密碼持有者了。這樣既保證了密碼泄露的可能滚秩,又保證了驗證持有者的功能专执。
? ? 比特幣應(yīng)用:
? ? ? ? 比特幣地址生成的時候使用了哈希函數(shù)。
若對算法細(xì)節(jié)感興趣郁油,參考:https://www.cnblogs.com/huazhenghao/p/5516688.html