壹個優秀的哈希算法將實現:
但是,在不同的使用場景中,例如數據結構和安全領域,將強調壹些功能。
以HashMap為例,key(哈希值)對應壹個(或多個數據),key的作用是對防碰撞的要求沒那麽高。換句話說,散列產生的鍵只需要確保值大致均勻地放在不同的桶中。但是整個算法的set性能直接關系到哈希值生成的速度,所以此時哈希值生成的速度就顯得尤為重要,比如JDK中的String.hashCode():
在密碼學中,哈希算法的功能主要用於消息摘要和簽名,並驗證整個消息的完整性。這需要極高的防碰撞和防篡改能力,其次是速度。以MD5為例,其輸出長度為128位,設計的期望碰撞概率為1/(2 128),這是壹個非常小的數字。
目前流行的哈希算法包括MD5、SHA-1和SHA-2。
可以看出,這些流行算法之間最重要的區別是“強防碰撞”。