1.概念
? ? ? ? Hash,一般翻譯為“散列”心肪,也有直接音譯為“哈隙Э鳎”的。
? ? ? ? Hash就是把任意長度的輸入硬鞍,通過散列算法慧瘤,變換成固定長度的輸出,該輸出就是散列值固该。直觀解釋起來锅减,就是對一串?dāng)?shù)據(jù)m進(jìn)行雜糅,輸出另一段固定長度的數(shù)據(jù)h蹬音,作為這段數(shù)據(jù)的特征(指紋)上煤。也就是說,無論數(shù)據(jù)塊m有多大著淆,其輸出值h為固定長度劫狠。
2.用途
? ? ? ? Hash主要應(yīng)用于數(shù)據(jù)結(jié)構(gòu)中和密碼學(xué)中。
? ? ? ? 用于數(shù)據(jù)結(jié)構(gòu)時永部,主要是為了提高查詢的效率独泞,這就對速度比較重視,對抗碰撞不太看中苔埋,只要保證hash均勻分布就可以懦砂。
? ? ? ? 在密碼學(xué)中,hash算法的作用主要是用于消息摘要和簽名组橄,換句話說荞膘,它主要用于對整個消息的完整性進(jìn)行校驗。
2.1數(shù)據(jù)結(jié)構(gòu)
? ? ? ? 使用Hash的數(shù)據(jù)結(jié)構(gòu)叫做散列表玉工,主要是為了提高查詢的效率羽资。也有直接譯作哈希表,也叫Hash表遵班,
? ? ? ? Hash表是一種特殊的數(shù)據(jù)結(jié)構(gòu)屠升,它同數(shù)組、鏈表以及二叉排序樹等相比較有很明顯的區(qū)別狭郑,它能夠快速定位到想要查找的記錄腹暖,而不是與表中存在的記錄的關(guān)鍵字進(jìn)行比較來進(jìn)行查找。這個源于Hash表設(shè)計的特殊性翰萨,它采用了函數(shù)映射的思想將記錄的存儲位置與記錄的關(guān)鍵字關(guān)聯(lián)起來脏答,從而能夠很快速地進(jìn)行查找。
2.2密碼學(xué)
? ? ? ? 在密碼學(xué)中,hash算法的作用主要是用于消息摘要和簽名以蕴,換句話說糙麦,它主要用于對整個消息的完整性進(jìn)行校驗。
? ? ? ? 舉個用于消息摘要例子丛肮,銀行的數(shù)據(jù)庫中是不能保存用戶密碼的原文的,只能保存密碼的hash值魄缚。在這種應(yīng)用場景里宝与,對于抗碰撞和抗篡改能力要求極高,對速度的要求在其次冶匹。一個設(shè)計良好的hash算法习劫,其抗碰撞能力是很高的。以MD5為例嚼隘,其輸出長度為128位诽里,設(shè)計預(yù)期碰撞概率為,這是一個極小極小的數(shù)字——而即便是在MD5被王小云教授破解之后飞蛹,其碰撞概率上限也高達(dá)谤狡,也就是說,至少需要找次才能有1/2的概率來找到一個與目標(biāo)文件相同的hash值卧檐。
? ? ? ? 需要注意的是墓懂,hash算法在密碼學(xué)中,主要用于信息的摘要和完整性校驗霉囚,而不是加密捕仔。
? ? ? ? 概括來說,哈希(Hash)是將目標(biāo)文本轉(zhuǎn)換成具有相同長度的盈罐、不可逆的雜湊字符串(或叫做消息摘要)榜跌,而加密(Encrypt)是將目標(biāo)文本轉(zhuǎn)換成具有不同長度的、可逆的密文盅粪。