使用MD2散列独特的字符串

时间:2015-05-28 08:47:31

标签: php hash cryptography string-hashing

我有一个独特的电子邮件地址列表 - 一个非常简单的问题。如果电子邮件是唯一的,则输出始终是唯一的,

hash('md2', $email);

3 个答案:

答案 0 :(得分:2)

根据WikiPedia,最好的攻击是:

  

2009年,MD2被证明易受冲突攻击,时间复杂度为2 ^ 63.3压缩函数评估和2 ^ 52哈希值的内存要求。这比生日攻击略好,预计将进行265.5压缩函数评估。

然而,找到一个短电子邮件地址的冲突仍然很棘手。

如果你真的需要更多安全性一个128位散列值,那么使用SHA-256的第一个(最左边)128位会更好,这在写入时被认为是安全的。当然首选使用完整的256位。

偶然发生碰撞的几率接近于零。因此,如果您只是使用它来创建一些独特的东西(即不考虑目标攻击),那么使用MD2就可以了。即便如此,如果您可以更改协议,请改用SHA-256。

答案 1 :(得分:1)

像MD2这样的散列函数就像名称建议的消息摘要算法一样,它们采用任意长度的输入并给出固定长度的输出。唯一输入肯定存在冲突。

您可以使用更强大的哈希函数,如SHA-256,与MD2相比,两个字符串之间的冲突极不可能。生日悖论适用于此,因此您不应使用MDx函数或任何短于256位散列函数的函数。

我看到你正在散列电子邮件地址。根据您的系统,这可以通过碰撞来利用。例如,某些电子邮件提供商启用了表单的虚拟地址" myname+1@domain.com"," myname+2@domain.com"等等。攻击者可能会使用该事实来查找与已知其他电子邮件地址的冲突,以获取密码重置电子邮件或类似信息。

答案 2 :(得分:1)

MD2产生128位的散列。您可以通过散列2 ^ 128 + 1个字符串来保证至少一个哈希冲突。