hash - 如何解決PHP雜湊函數的碰撞

來源:互聯網
上載者:User
最近想使用Hash函數來根據一個字串來產生一個惟一的值,但是沒找到好用的Hash函數,像PHP內建的MD5、SHA等雜湊函數產生的值太長,我沒法用,想截取,這樣做又擔心會出現雜湊碰撞,特來拜求高人們用的是什麼雜湊函數

回複內容:

最近想使用Hash函數來根據一個字串來產生一個惟一的值,但是沒找到好用的Hash函數,像PHP內建的MD5、SHA等雜湊函數產生的值太長,我沒法用,想截取,這樣做又擔心會出現雜湊碰撞,特來拜求高人們用的是什麼雜湊函數

雖然說採用什麼雜湊演算法要看資料而定,但連MD5再嫌長,可真的有些難辦了。其實我很想聽聽為什麼“雜湊函數產生的值太長,我沒法用”。如果是沒有任何評估,單憑感覺就這麼說,那真的太過分了。

你可能需要的不是一個低衝撞的雜湊演算法,而是將雜湊演算法的輸出壓縮的字串壓縮演算法。由於雜湊演算法輸出的字元集不過16個,而ASCII的顯示字元扣掉空格也剩94個,所以單從壓縮字串長度來看,這個想法應該能夠讓你滿意。

輸出變短(也就是雜湊值的取值空間變小)必然增加雜湊碰撞機率,不要有任何不切實際的幻想。也就是說,無論你的演算法是什麼,只要範圍等同的減小,雜湊碰撞的機率就會等同的增大。所以如果真的需要短輸出的雜湊函數,也就不必再費盡心思去找,截取這個辦法已經足夠有效了。

標題起的也不好。雜湊碰撞的出現是必然的,“解決”雜湊碰撞本身就不存在。

雜湊碰撞雖然是小機率事件,但絕對不能怕,更不能躲,尤其不能當作“不存在”。一定要根據應用的需求,有明確的方法對待之。我的建議,要麼加長雜湊演算法的取值空間,要麼增加其他的比較特徵,作為在雜湊演算法之外額外的補充。

長度越長,碰撞的幾率越小。減少長度必然增加碰撞幾率。因為你是把原文空間隱射到雜湊產生串的空間,串長度決定了空間的大小。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.