可以将varchar(32)用于md5哈希

时间:2013-05-05 06:54:45

标签: php sql

我正在使用varchar(50) NOT NULL,作为md5哈希码

的一个简单问题

只是想知道是否可以将它用作32?

另外我有数百万md5哈希码,因为它们与其他不匹配,是否有两个不同的关键字可以拥有相同的md5哈希的现金?

由于

2 个答案:

答案 0 :(得分:2)

由于您要处理特定尺寸,因此请使用char(32)以获得更好的效果。

varchar需要额外的几个字节来存储字符串的长度。没必要,因为你已经知道了长度。

答案 1 :(得分:2)

VARCHAR适用于您不知道长度的字符串,您可以通过较低的性能来获得更大的灵活性。如您所知,字段长度为32个字符,您应该使用CHAR(32)(希望完全 32个字符)。

至于碰撞可能性:是的,MD5哈希可以是相同的。为自己测试这个的简单方法是md5sum一个33个字符的十六进制数。如果这样可行,您知道输入可能比输出多,因此两个输入必须能够映射到相同的输出。

这两个区块(由this link提供)着名的都是md5sum 79054025255fb1a26e4bc422aef54eb4

BLOCK 1:
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

BLOCK 2:
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

This website提供了对为什么这些特定字符串冲突的可视化,如果您感兴趣的话(如果您想要更好地理解消息摘要和散列,那么它非常技术性但非常有趣)。 / p>