回答
實際上,是的。
實際上,已經證明它確實存在碰撞的可能性。我會用SHA-1代替。 1
實際上=現實。所以不行。 – 2012-01-11 16:14:02
我不認爲一個字的答案是適當的。在很多情況下,md5的碰撞機率比它仍然是一個可行的算法選擇還要低,這取決於情況。 – KingCronus 2012-01-11 16:16:38
md5不是一個內射函數,因爲輸出小於輸入,所以你有比輸出更多的輸入可能性。
我認爲sha-1不是內射的。
你怎麼能想到,你對MD5提出的相同論點也不適用於SHA-1? – 2012-01-11 16:13:25
我完全同意,我只是忘了'不'字。 SHA-1不是單射 – JuSchz 2012-01-11 16:16:31
沒有,MD5有collision vunerabilities。其他散列函數(如SHA-1)也具有散列衝突,儘管它比MD5更不可能。
內射散列函數也被稱爲perfect hash function。完美的散列函數確實存在,但是在你知道你的散列是完美的之前,你需要知道關於輸入數據的某些需求或信息。
有關創建完美哈希函數的信息,您可以查看CMPH。
如果一個完美的哈希函數可以存在,那麼可以說這條評論「你可以很容易地證明,任何能夠在比其輸出大投入工作的散列函數不能射。」是錯的? – Yasser1984 2012-01-14 20:55:27
評論是錯誤的,因爲完美的散列在給定的集合上工作。例如,如果集合是{10,20,30,...}並且哈希函數是函數哈希(int i){return i/10; }'。我認爲這個評論實際上意味着輸入的_range_。 – cmbuckley 2012-01-15 16:36:08
每個哈希函數都不是內射的。哈希將大型域映射到明顯更小的共域。根據鴿子洞原理,這樣的函數不能是內射的,因爲域中會有項目映射到共域的相同項目。
例如,給散列函數一個大文件作爲輸入,並接收一個短校驗和。有很多可能的大文件(鴿子)比可能的短校驗和(鴿子洞)要多,所以「碰撞」肯定會發生。
- 1. 哪個庫是MD5()函數?
- 2. mmap是內置函數嗎?
- 3. md5()函數?
- 4. '$ .md5的神祕不是函數'
- 5. 使用md5函數
- 6. MD5散列函數
- 7. 的OBJÇMD5從PHP MD5()函數
- 8. C++函數來判斷一個給定的函數是否是內射的
- 9. id是一個python內建函數嗎?
- 10. 如何使用md5函數創建md5哈希,因爲crypt函數使用md5函數生成,而不是crypt函數?
- 11. 解密md5哈希函數
- 12. 如果數值已經是MD5,卡桑德拉會避免計算行MD5嗎?
- 13. 在C++中,構造函數和析構函數可以是內聯函數嗎?
- 14. md5()函數中的PHP顯示錯誤
- 15. 火花sql中列的Md5列函數
- 16. Spark集羣中的RDD映射函數內調用函數
- 17. 宏參數是函數嗎?
- 18. php md5哈希函數返回500內部錯誤
- 19. 什麼是函數md5()在PHP中的(默認)編碼?
- 20. 在PHP中,什麼是Android/Java的MD5函數?
- 21. 在Z3中定義內射函數
- 22. socket.io - 從匿名函數內發射
- 23. C++中的映射函數是什麼?
- 24. 在函數體內的typedef是不好的編程習慣嗎?
- 25. 只能調用一次的大函數是內聯的嗎?
- 26. 函數'未在此範圍內聲明',但它是!不是嗎?
- 27. PHP中有內置的sortByKey()函數嗎?
- 28. Calc的內容-MD5在AFNetworking
- 29. 這是對內聯函數對象的調用嗎?
- 30. 內聯函數靜態常量是唯一的嗎?
您可以很容易地證明任何能夠處理大於其輸出的輸入的散列函數不能是內射的。 – thiton 2012-01-11 16:17:48
我不確定這個論證是否有意義,還有什麼可以證明的嗎? – Yasser1984 2012-01-14 20:58:43
[MD5的最小塊長度爲512位,輸出爲128位](http://en.wikipedia.org/wiki/MD5#Algorithm)。它不能是內射的,因爲輸入數字比輸出數字多2^384。你可以談論一個受限制的MD5,但是你必須定義你的填充方法。 – thiton 2012-01-14 21:07:36