官术网_书友最值得收藏!

第5章 哈希函數

5.1 哈希函數的特性

哈希函數是指一類數學運算過程,它接受任意大小的輸入值,經過運算后可以給出一個確定的固定長度的輸出值,這個輸出值可以作為這個輸入值的數字指紋。正如對于雙胞胎而言,他們各自的指紋也是獨一無二的,哈希函數的設計使得它也具有同樣的特性:即使是非常微小的輸入值差別,哈希函數的運算結果也會有非常巨大的差異。除此以外,哈希函數沒有任何啟發(fā)式算法,輸入和輸出的關系看起來是完全隨機的,例如給一個確定的輸出結果,要求對應的輸入值應該是多少,或者是要求輸出結果小于某個值,問一個符合條件的輸入值應該是多少,這些問題的求解沒有什么技巧和方法可循,只能通過不斷地進行嘗試,嘗試的次數越多,越有可能找到答案。

人們可以利用哈希函數的這些特性實現(xiàn)很多功能。例如數據保護:將數據的內容和數據的哈希值一起發(fā)送,接收者對接收到的數據進行哈希運算,對比即可知道數據是否被篡改。再比如,網站在進行用戶登錄時,可以在數據庫里存儲用戶密碼的哈希值,與用戶輸入的密碼的哈希值進行比對來驗證身份,好處是如果數據庫泄露,黑客也不能通過這些哈希值來反推出用戶的密碼,相對來說比較安全。

值得注意的是,哈希函數的輸入集合是無限的,而由于輸出長度固定,輸出的所有可能的集合是有限的,根據鴿籠原理:n+1個元素放到n個集合中去,其中必定有一個集合里至少有兩個元素。所以兩個不同的輸入值有相同的哈希值理論上是一定存在的,但這樣的事情發(fā)生的概率非常小,而且哈希函數也在不斷改進的過程中,SHA1函數就曾經被密碼分析人員發(fā)現(xiàn)了有效的攻擊方法,此后如比特幣在內的系統(tǒng)采用了更先進的SHA2系列算法,比特幣多年的良好運行,表明SHA256算法經受了時間的檢驗。此外,連續(xù)多次使用哈希函數也是一種更加安全的選擇。

哈希函數在比特幣中有多處運用,可以說扮演了非常關鍵的角色。

主站蜘蛛池模板: 崇明县| 望城县| 密山市| 镇康县| 沾益县| 修武县| 二连浩特市| 濮阳县| 宜阳县| 三河市| 南漳县| 尖扎县| 定远县| 井冈山市| 太保市| 团风县| 拜城县| 延庆县| 商都县| 青田县| 洛川县| 额敏县| 托克逊县| 无棣县| 江安县| 阿拉尔市| 兴仁县| 铁岭市| 论坛| 水城县| 酉阳| 博爱县| 舒兰市| 罗甸县| 贺州市| 嘉鱼县| 双鸭山市| 澎湖县| 保山市| 黑河市| 射阳县|