2013-12-22 62 views
0

這個問題不需要任何代碼,它只是關於MD5散列的概念性事情。用戶名散列中的MD5散列衝突

我的應用程序管理用戶社區。

我使用MD5哈希將任意長度的用戶暱稱縮減爲哈希。 我預計的每個nick的MD5是不同的,因爲這個MD5(nick)將是我的每個用戶的用戶ID。

這是否始終如此?我敢肯定,我錯過了一些東西,長期可能會發生碰撞(數百萬用戶===數百萬不同長度的不同刻度)

+0

爲什麼你不使用nick作爲userid? –

+0

是的,可能會有碰撞。這不太可能。另外MD5壞了。 –

+0

@JensSchauder一個子系統做這個映射文件存儲在服務器中,我們只是想知道是否需要關注衝突,但對於服務器來說效率真的很方便,所有文件夾都只是十六進制數 – rupps

回答

0

隨機數據(例如用戶名)的MD5碰撞非常稀少你可能永遠不會看到它們。問題在於MD5在碰撞抵抗方面已經被破壞,所以攻擊者可以很容易地生成一對具有相同哈希的用戶名,無論安全和/或功能如何影響您的設計。

在您的情況下生成簡短標識符的常用方法是將每個用戶名與在帳戶數據庫中按順序生成的數字關聯起來。應用程序在內部使用該號碼,並且僅在需要向用戶顯示某些內容時才引用該用戶名。

+0

你不覺得如果用戶名只能包含一個縮減的字符集和最大長度它會幾乎不可能le找到符合條件的碰撞?在我的情況下,如果我可以依靠這個md5技巧,我有很多可取的好處(例如,在沒有詢問db的情況下知道客戶端上的任何用戶名的ID) – rupps

+0

減少的字符集將無濟於事如果您使用的是8位編碼(如ISO-8859-1或Windows-1252)(可能有15%的字符無效);它對UTF-16的幫助甚少(可能有5%無效)。 – Mark

+0

我可以像@Krzysiek點一樣添加SHA1部分 – rupps