如何为数组生成唯一键?

时间:2017-04-14 14:50:17

标签: php hash-collision

我想根据数组的内容生成唯一标识符。我最初的方法是简单地做:

$key = md5(json_encode($array));

但是,我希望绝对确定密钥是唯一的,并且两个不同的数组可能会产生相同的md5哈希。目前的想法是:

$key = base64_encode(json_encode($array));

这保证是唯一的但产生相当长的密钥。我可以使用sha512或者这种类型的哈希与md5具有相同的密钥冲突潜力吗?有没有办法生成比base64方法更短的密钥,100%保证是唯一的?

要100%明确,我的问题是:如何为一组数据生成最短的100%唯一标识符?

1 个答案:

答案 0 :(得分:6)

如果您希望100%保证唯一键与您的内容相匹配,那么唯一的方法是使用您的内容的全长。您可以按原样使用json_encoded字符串,或者如果您想要一个没有任何“特殊”字符的字符串,您可以通过base64_encode()或bin2hex()或类似字符串运行它。任何哈希函数如md5,sha1,sha256等显然不能100%唯一 - 因为它们具有固定长度,并且由于https://en.wikipedia.org/wiki/Pigeonhole_principle必须存在大于哈希的输入内容的非唯一结果。

实际上,md5和sha1冲突现在已经发布,但是更强的哈希函数存在于长时间没有已知或预期的冲突,所以你也可以考虑使用现代哈希算法并且相当安全。没有任何重复。