1.概念
? ? ? ? Hash,一般翻譯為“散列”,也有直接音譯為“哈希”的。
? ? ? ? Hash就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。直觀解釋起來,就是對一串數據m進行雜糅,輸出另一段固定長度的數據h,作為這段數據的特征(指紋)。也就是說,無論數據塊m有多大,其輸出值h為固定長度。
2.用途
? ? ? ? Hash主要應用于數據結構中和密碼學中。
? ? ? ? 用于數據結構時,主要是為了提高查詢的效率,這就對速度比較重視,對抗碰撞不太看中,只要保證hash均勻分布就可以。
? ? ? ? 在密碼學中,hash算法的作用主要是用于消息摘要和簽名,換句話說,它主要用于對整個消息的完整性進行校驗。
2.1數據結構
? ? ? ? 使用Hash的數據結構叫做散列表,主要是為了提高查詢的效率。也有直接譯作哈希表,也叫Hash表,
? ? ? ? Hash表是一種特殊的數據結構,它同數組、鏈表以及二叉排序樹等相比較有很明顯的區別,它能夠快速定位到想要查找的記錄,而不是與表中存在的記錄的關鍵字進行比較來進行查找。這個源于Hash表設計的特殊性,它采用了函數映射的思想將記錄的存儲位置與記錄的關鍵字關聯起來,從而能夠很快速地進行查找。
2.2密碼學
? ? ? ? 在密碼學中,hash算法的作用主要是用于消息摘要和簽名,換句話說,它主要用于對整個消息的完整性進行校驗。
? ? ? ? 舉個用于消息摘要例子,銀行的數據庫中是不能保存用戶密碼的原文的,只能保存密碼的hash值。在這種應用場景里,對于抗碰撞和抗篡改能力要求極高,對速度的要求在其次。一個設計良好的hash算法,其抗碰撞能力是很高的。以MD5為例,其輸出長度為128位,設計預期碰撞概率為,這是一個極小極小的數字——而即便是在MD5被王小云教授破解之后,其碰撞概率上限也高達,也就是說,至少需要找次才能有1/2的概率來找到一個與目標文件相同的hash值。
? ? ? ? 需要注意的是,hash算法在密碼學中,主要用于信息的摘要和完整性校驗,而不是加密。
? ? ? ? 概括來說,哈希(Hash)是將目標文本轉換成具有相同長度的、不可逆的雜湊字符串(或叫做消息摘要),而加密(Encrypt)是將目標文本轉換成具有不同長度的、可逆的密文。