2013-12-22 61 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