我正在使用varchar(50) NOT NULL,
作为md5哈希码
只是想知道是否可以将它用作32?
另外我有数百万md5哈希码,因为它们与其他不匹配,是否有两个不同的关键字可以拥有相同的md5哈希的现金?
由于
答案 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>