我在某處讀到md5不是100%安全的。因此,這個問題。使用相同的md5散列有兩個字符串的機會是多少?
回答
您似乎在問2個獨立但相關的問題。
隨機衝突的概率高度依賴於您正在使用的數據的大小;您散列的串越多,碰撞發生的可能性就越大。有關確切概率,請參閱Wikipedia: Birthday Attack的第一個表格。 MD5使用128位,所以要達到50%的衝突概率,您需要2.2E19個字符串。但是,儘管隨機衝突對於小數據集來說很適合,但MD5已經證明對於故意的衝突是完全不安全的。根據Wikipedia article on MD5,存在一個衝突攻擊,可以在2.6Ghz Pentium4處理器上以秒爲單位運行。爲了安全起見,MD5已完全破解,自2005年以來一直被認爲是如此。
如果您需要安全地散列某些內容,請使用其中一種更現代的散列算法,如SHA-2,SHA-3完成)或惠而浦。
還有一個問題,PHP中是否有SHA2()函數?我試圖在他們的網站上尋找它,但我發現的只是SHA1()。 – Nath 2012-02-05 14:46:04
見http://www.php.net/manual/en/function.crypt.php。確保閱讀CRYPT_SHA512說明,因爲它告訴你如何使函數實際上使用SHA512進行散列。 – 2012-02-07 01:14:13
- 1. 兩個字符串中有多少個字符相同
- 2. 是否有可能兩個不同字符串的MD5是相同的?
- 3. MD5散列字符串
- 4. 計算字符串的MD5散列階
- 5. 兩個字符串:相同的散列碼
- 6. 有沒有可能使用md5生成相同的散列鍵?
- 7. 散列(md5,sha1)的任何子字符串是否比另一個更「隨機」?
- 8. Python MD5散列相同的內容返回不同的散列
- 9. MD5散列或加密其字符串?
- 10. 生成MD5散列字符串T-SQL
- 11. SHA1不會爲相同的字符串輸入生成相同的散列值?
- 12. C++是兩個字符串相同嗎?
- 13. 爲什麼相同的輸入返回兩個不同的MD5散列?
- 14. 查找在兩個字符串中有多少個單詞相同
- 15. 如何在C中創建一個字符串的md5散列?
- 16. 確定是否有兩個相鄰字符相同的字符
- 17. 兩個隨機浮點數相同的概率是多少?
- 18. 安全使用md5散列作爲註冊字符串標記?
- 19. 使用散列表和字符串打印md5校驗和值
- 20. 字符串池是否包含兩個具有相同值的字符串?
- 21. SHA將相同的字符串散列到不同的塊中
- 22. 計數列表中有多少個字,字符串中使用
- 23. 計算兩個字符串有多少個重複字符
- 24. MD5散列串正常串
- 25. MySQL的:計算兩個表中有多少行是相同的
- 26. 兩個不相等的對象具有相同的散列碼
- 27. 如何異或MD5散列並返回32個字符的字符串?
- 28. 給定兩個字符串長度,測試兩個字符串是否相同
- 29. 散列的md5散列
- 30. MD5散列中有多餘字符問題?
來自維基百科頁面:「MD5哈希函數的安全性受到嚴重破壞,碰撞攻擊存在可以在具有2.6Ghz Pentium4處理器(複雜度爲2^24.1)的計算機上在幾秒鐘內發現衝突」可能不適用於您的用例,但我會選擇另一個散列函數來確保任何安全相關。 – vhallac 2012-02-05 13:49:00
應該使用SHA-2嗎? – Nath 2012-02-05 14:03:30
通過蠻力查找重複哈希的概率很容易計算;所需的工作量就會與散列中的每個附加位一起加倍。具有* n *位的散列可以採用2^n個不同的值;因此,概率是1/2^n。如果存在減少所需努力的弱點,當然也需要考慮到這些弱點。但鑑於SHA-2具有更多位*和*,算法中沒有已知的漏洞,因此結論應該很容易。是的,這是一個更好的選擇,但根據您的要求,它可能不足(或者,授予,矯枉過正)。 – tripleee 2012-02-05 14:26:13