1

只是我 varchar(50) NOT NULL,用于 md5 哈希码的一个简单问题

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

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

谢谢

4

2 回答 2

3

VARCHAR对于不知道长度的字符串,您可以用较低的性能换取更大的灵活性。如您所知,该字段的长度为 32 个字符,您应该改用CHAR(32)(预计正好是32 个字符)。

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

这两个块(由这个链接提供)都给出了著名md5sum79054025255fb1a26e4bc422aef54eb4

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

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

如果您有兴趣,该网站提供了这些特定字符串为什么会发生冲突的可视化(如果您想更好地理解消息摘要和散列,这是非常技术性的,但非常有趣)。

于 2013-05-05T08:21:40.783 回答
2

由于您正在处理特定大小,因此请使用char(32)以获得更好的性能。

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

于 2013-05-05T08:13:30.130 回答