在 mysql 中有效存储 md5 哈希的最佳实践
Posted
技术标签:
【中文标题】在 mysql 中有效存储 md5 哈希的最佳实践【英文标题】:Best practices for efficiently storing md5 hashes in mysql 【发布时间】:2011-01-20 13:26:26 【问题描述】:可能的字段类型:
BINARY(16)
CHAR(32)
BIGINT + BIGINT
我如何决定使用哪一个?
【问题讨论】:
MD5 哈希通常表示为 32 位十六进制数。 CHAR(32) 可以正常工作。 无。不要使用 MD5,它是 dead hash。使用 SHA-2 或更高版本,存储为一系列十六进制字符(64 个字符)。以这种方式阅读非常好,而且这是标准方法。 我不擅长 mysql,但哈希通常是字节数组,所以 BINARY(16) 应该是最好的,但如果需要,可能更难针对 Binary 编写自定义 sql 问题? @NoonSilk MD5 是一个完全可以接受的非加密原因(例如重复检测),但由于彩虹表,不应用于密码。 【参考方案1】:如果列已编入索引并且您知道自己在做什么,出于性能原因,BINARY(16)
。
否则,CHAR(32)
很好。确保该列使用 ascii 字符集。 (例如ascii_bin
)
【讨论】:
UNHEX() 会将 MD5 转换为二进制字符串。 dev.mysql.com/doc/refman/5.0/en/… 然后在 SELECTing 时使用 HEX() 将二进制转换回更易读的十六进制形式。以上是关于在 mysql 中有效存储 md5 哈希的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章