在 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 哈希的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

哈希密码的最佳实践

是否有最佳实践/连贯的方法来更新包含哈希键值存储的数据库字段?

我应该使用什么哈希算法来存储密码?

如何迁移密码哈希?

NGRX - 使用哈希而不是数组来表示状态

加盐密码:最佳实践? [关闭]