是否已有任何32位校驗和算法之一:32位校驗和算法比CRC32質量更好?
- 較小用於將輸入數據的散列衝突概率尺寸< 1 KB?
- 碰撞命中,分佈更均勻。
這些相對於CRC32。由於32位存儲空間的限制,我實際上不計算第一個屬性。但對於第二...似乎可能是改進。
任何想法?謝謝。 (我需要具體的實現,在C中更好,但C++/C#或任何開始也沒關係)。
是否已有任何32位校驗和算法之一:32位校驗和算法比CRC32質量更好?
這些相對於CRC32。由於32位存儲空間的限制,我實際上不計算第一個屬性。但對於第二...似乎可能是改進。
任何想法?謝謝。 (我需要具體的實現,在C中更好,但C++/C#或任何開始也沒關係)。
MurmurHash怎麼樣?它是said,這個散列具有良好的分佈(通過卡方檢驗)和良好的雪崩效應。運算速度也非常好。
不符合第一標準。任何設計良好的具有32位輸出的散列函數對於任何一對輸入都有1/2^32的碰撞機率。第二個標準沒有很好的定義,雖然肯定有一些可以使用的統計測試,並且我確定有人做了它(卡方的衝突間隔?)。至於需要一個實現,我強烈建議你不要接受任何推薦的散列函數代碼,它不是一個衆所周知的散列的實現,因爲在你自己的散列或加密時存在安全問題或性能較差的高風險。一個衆所周知但糟糕的散列函數比你自己設計的散列函數要好,即使後者測試良好並具有「良好」的碰撞分佈,只是因爲前者有更多的眼球。
CRC32是這個定義的「精心設計的散列函數」嗎?它旨在檢測某些類型的錯誤,所以我希望具有某種差異的輸入具有較高的檢測概率(即不同的CRC值),但會犧牲其他類型的差異。 –
您是否將它用作錯誤糾正系統中的校驗和,或者您是否將其用作散列函數,以便可能通過比較它們的散列來檢測兩個輸入是否不同?糾錯碼和散列函數具有不同的期望屬性。在CRC32的情況下,它專門設計用於檢測您在嘈雜的線路上出現的錯誤(一位或幾位差異,不確定是哪一個)。 –
我使用它作爲散列函數來比較兩個小數據。 (<1KB)。但我被迫使用32位散列。 –