2012-01-11 31 views
4

是md5哈希算法的一個內射函數嗎?這意味着它會爲任何給定的輸入生成一個唯一的輸出?是md5的內射函數嗎?

如果不是,還有其他一些類似的哈希算法是否是內射?

+2

您可以很容易地證明任何能夠處理大於其輸出的輸入的散列函數不能是內射的。 – thiton 2012-01-11 16:17:48

+0

我不確定這個論證是否有意義,還有什麼可以證明的嗎? – Yasser1984 2012-01-14 20:58:43

+0

[MD5的最小塊長度爲512位,輸出爲128位](http://en.wikipedia.org/wiki/MD5#Algorithm)。它不能是內射的,因爲輸入數字比輸出數字多2^384。你可以談論一個受限制的MD5,但是你必須定義你的填充方法。 – thiton 2012-01-14 21:07:36

回答

-2

實際上,是的。

實際上,已經證明它確實存在碰撞的可能性。我會用SHA-1代替。 1

+1

實際上=現實。所以不行。 – 2012-01-11 16:14:02

+1

我不認爲一個字的答案是適當的。在很多情況下,md5的碰撞機率比它仍然是一個可行的算法選擇還要低,這取決於情況。 – KingCronus 2012-01-11 16:16:38

0

md5不是一個內射函數,因爲輸出小於輸入,所以你有比輸出更多的輸入可能性。

我認爲sha-1不是內射的。

+2

你怎麼能想到,你對MD5提出的相同論點也不適用於SHA-1? – 2012-01-11 16:13:25

+0

我完全同意,我只是忘了'不'字。 SHA-1不是單射 – JuSchz 2012-01-11 16:16:31

-1

這是另一個可能能夠回答你的問題的文章。

技術上不行,但是有,因爲他們有相同的機會。

這裏是另一篇文章討論this issue.

6

沒有,MD5有collision vunerabilities。其他散列函數(如SHA-1)也具有散列衝突,儘管它比MD5更不可能。

內射散列函數也被稱爲perfect hash function。完美的散列函數確實存在,但是在你知道你的散列是完美的之前,你需要知道關於輸入數據的某些需求或信息。

有關創建完美哈希函數的信息,您可以查看CMPH

+0

如果一個完美的哈希函數可以存在,那麼可以說這條評論「你可以很容易地證明,任何能夠在比其輸出大投入工作的散列函數不能射。」是錯的? – Yasser1984 2012-01-14 20:55:27

+0

評論是錯誤的,因爲完美的散列在給定的集合上工作。例如,如果集合是{10,20,30,...}並且哈希函數是函數哈希(int i){return i/10; }'。我認爲這個評論實際上意味着輸入的_range_。 – cmbuckley 2012-01-15 16:36:08

-1

每個哈希函數都不是內射的。哈希將大型域映射到明顯更小的共域。根據鴿子洞原理,這樣的函數不能是內射的,因爲域中會有項目映射到共域的相同項目。

例如,給散列函數一個大文件作爲輸入,並接收一個短校驗和。有很多可能的大文件(鴿子)比可能的短校驗和(鴿子洞)要多,所以「碰撞」肯定會發生。