2011-03-17 48 views
4

當我爲此谷歌,我有點與一個答案衝突,因爲這些算法不斷改進和新的漏洞被發現,並且新問題一直出現......關於什麼算法使用的很多建議是隻是老舊,或者在他們是最好的方式的時候讓他們保持思想。截至2011年,什麼散列算法最適合消息摘要?

我想在這裏說得很清楚:我不是在談論密碼。我在談論消息摘要,而不是密碼哈希。

我可以繼續使用md5作爲消息摘要的第一個註釋(它的名稱是正確的),但是後來我記得比那些更現代的算法有更多的碰撞。但那麼,是什麼讓這些新算法更適合文件或短字符串的消息摘要呢?

這就是我的問題,現代消息摘要算法應該用什麼?

回答

2

從這個角度來看,根據您使用的數據量,SHA1應該會很好 - 如果您要處理大量數據,則SHA-2算法(例如SHA-256)可能更適合因爲SHA1中的碰撞恐懼因其算法缺陷而增加,但在處理少量數據時並不是非常嚴重。

MD5已被證明太容易發生衝突,因爲已經有使用MD5創建僞造的SSL證書的SSL證書受到攻擊,所以我會遠離那裏。還取決於您的應用程序,MD5不符合FIPS 140,如果這對您來說很重要。

SHA1比MD5更理想,因爲它更安全,因爲MD5使用起來很危險,而SHA1在大多數情況下比SHA-2具有更好的性能。 SHA-2算法絕不慢 - 但它有一個優勢。然而,SHA1風險較小,因爲您可能已經鎖定使用它 - 如果發現衝突,可能很難改變,所以最好先投資於SHA-2算法。在SHA-1上使用SHA-256的懲罰很少,這取決於你將如何使用SHA算法。 SHA-2算法產生的輸出比SHA1大得多,但有利於減少碰撞機率。

那麼哪一個是對的?這取決於你在找什麼和你的用例。希望現在你可以做出決定。

2

如有疑問,請使用SHA-256。其他SHA-2功能也很好;但是,SHA-384和SHA-512在小型(僅限32位)平臺上可能會受到不可忽視的性能下降。這個可能對於某些特定的應用很重要。

對於非安全相關的用途(索引在哈希表中如第一關,還是偶然的,非惡意的數據改變進行檢測 - 您可以使用一個CRC的作業類型),考慮MD4的前身到MD5。 MD4比MD5更加破碎,但是實現起來更簡單(使用更短的代碼)並且更快(實際上,在某些ARM平臺上測得的速度比CRC32快)。