哈希算法
哈希算法
什么是哈希算法
散列函數(Hash function)又稱散列算法、哈希函數,是一種從任何一種數據中創建小的數字“指紋”的方法。

哈希算法有什么特點
確定性
如果兩個散列值是不相同的(根據同一函數),那么這兩個散列值的原始輸入也是不相同的。
散列碰撞(collision)
散列函數的輸入和輸出不是唯一對應關系的,如果兩個散列值相同,兩個輸入值很可能是相同的,但也可能不同。
不可逆性
一個設計優秀的加密散列函數是一個“單向”操作:對于給定的散列值,沒有實用的方法可以計算出一個原始輸入,也就是說很難偽造。
同時一個哈希值對應無數個明文,理論上也不知道哪個是正確對應的。
混淆特性
輸入一些數據計算出散列值,然后部分改變輸入值,一個具有強混淆特性的散列函數會產生一個完全不同的散列值,沒有規律可循。
哈希算法有什么用
保護資料
加密存儲在數據庫的密碼字符串。
確保傳遞真實的信息
消息或數據的接收者確認消息是否被篡改的性質,稱為數據的真實性,也成為完整性。發信人通過將原消息和散列值一起發送,可以保證真實性。
散列表
散列表是散列函數的一個主要應用,使用散列表能夠快速的按照關鍵字查找數據記錄。
錯誤校正
使用一個散列函數可以很直觀的檢測出數據在傳輸時發生的錯誤。在數據的發送方,對將要發送的數據應用散列函數,并將計算的結果同原始數據一同發送。在數據的接收方,同樣的散列函數被再一次應用到接收到的數據上,如果兩次散列函數計算出來的結果不一致,那么就說明數據在傳輸的過程中某些地方有錯誤了。這就叫做冗余校驗。
語音識別
對于像從一個已知列表中匹配一個MP3文件這樣的應用,一種可能的方案是使用傳統的散列函數——例如MD5,但是這種方案會對時間平移、CD讀取錯誤、不同的音頻壓縮算法或者音量調整的實現機制等情況非常敏感。使用一些類似于MD5的方法有利于迅速找到那些嚴格相同(從音頻文件的二進制數據來看)的音頻文件,但是要找到全部相同(從音頻文件的內容來看)的音頻文件就需要使用其他更高級的算法了。
有哪些哈希算法
| 算法名稱 | 輸出大小(bits) | 內部大小 | 區塊大小 | 長度大小 | 字符尺寸 | 碰撞情形 |
|---|---|---|---|---|---|---|
| HAVAL | 256/224/192/160/128 | 256 | 1024 | 64 | 32 | Y |
| MD2 | 128 | 384 | 128 | No | 8 | 大多數 |
| MD4 | 128 | 128 | 512 | 64 | 32 | Y |
| MD5 | 128 | 128 | 512 | 64 | 32 | Y |
| PANAMA | 256 | 8736 | 256 | N | 32 | Y |
| RadioGatún | 任意長度 | 58 | 3 | N | 1-64 | N |
| RIPEMD | 128 | 128 | 512 | 64 | 32 | Y |
| RIPEMD-128/256 | 128/256 | 128/256 | 512 | 64 | 32 | N |
| RIPEMD-160/320 | 160/320 | 160/320 | 512 | 64 | 32 | N |
| SHA-0 | 160 | 160 | 512 | 64 | 32 | Y |
| SHA-1 | 160 | 160 | 512 | 64 | 32 | 有缺陷 |
| SHA-256/224 | 256/224 | 256 | 512 | 64 | 32 | N |
| SHA-512/384 | 512/384 | 512 | 1024 | 128 | 64 | N |
| Tiger(2)-192/160/128 | 192/160/128 | 192 | 512 | 64 | 64 | N |
| WHIRLPOOL | 512 | 512 | 512 | 256 | 8 | N |
The End
以上摘取文獻參考維基百科

浙公網安備 33010602011771號