2012-02-05 71 views
0

我在某處讀到md5不是100%安全的。因此,這個問題。使用相同的md5散列有兩個字符串的機會是多少?

+1

來自維基百科頁面:「MD5哈希函數的安全性受到嚴重破壞,碰撞攻擊存在可以在具有2.6Ghz Pentium4處理器(複雜度爲2^24.1)的計算機上在幾秒鐘內發現衝突」可能不適用於您的用例,但我會選擇另一個散列函數來確保任何安全相關。 – vhallac 2012-02-05 13:49:00

+0

應該使用SHA-2嗎? – Nath 2012-02-05 14:03:30

+0

通過蠻力查找重複哈希的概率很容易計算;所需的工作量就會與散列中的每個附加位一起加倍。具有* n *位的散列可以採用2^n個不同的值;因此,概率是1/2^n。如果存在減少所需努力的弱點,當然也需要考慮到這些弱點。但鑑於SHA-2具有更多位*和*,算法中沒有已知的漏洞,因此結論應該很容易。是的,這是一個更好的選擇,但根據您的要求,它可能不足(或者,授予,矯枉過正)。 – tripleee 2012-02-05 14:26:13

回答

2

您似乎在問2個獨立但相關的問題。

隨機衝突的概率高度依賴於您正在使用的數據的大小;您散列的串越多,碰撞發生的可能性就越大。有關確切概率,請參閱Wikipedia: Birthday Attack的第一個表格。 MD5使用128位,所以要達到50%的衝突概率,您需要2.2E19個字符串。但是,儘管隨機衝突對於小數據集來說很適合,但MD5已經證明對於故意的衝突是完全不安全的。根據Wikipedia article on MD5,存在一個衝突攻擊,可以在2.6Ghz Pentium4處理器上以秒爲單位運行。爲了安全起見,MD5已完全破解,自2005年以來一直被認爲是如此。

如果您需要安全地散列某些內容,請使用其中一種更現代的散列算法,如SHA-2,SHA-3完成)或惠而浦。

+0

還有一個問題,PHP中是否有SHA2()函數?我試圖在他們的網站上尋找它,但我發現的只是SHA1()。 – Nath 2012-02-05 14:46:04

+0

見http://www.php.net/manual/en/function.crypt.php。確保閱讀CRYPT_SHA512說明,因爲它告訴你如何使函數實際上使用SHA512進行散列。 – 2012-02-07 01:14:13

相關問題