MySQL使用哪种哈希算法?

4

我正在编写类似于phpMyAdmin的代码。但是我需要用户能够使用他们在mysql数据库中的用户名和密码进行登录。我需要知道mysql数据库用来存储每个用户密码的哈希类型。我查看了dev.mysql.com,但没有找到任何答案,除了它是以*开头的较新的41字节哈希。


当您将密码发送到MySQL时,您以明文形式发送它,无需自己进行哈希处理。 - Barmar
3个回答

3
不确定您的问题确切指向什么,但如果要了解MySQL如何加密存储在用户表中的密码,请阅读手册中的这里

MySQL使用自己的算法加密存储在用户表中的密码。此加密与SQL函数PASSWORD()实现的加密相同,但不同于Unix登录过程中使用的加密。Unix密码加密与SQL函数ENCRYPT()实现的加密相同。请参阅Section 12.13,“加密和压缩函数”中PASSWORD()ENCRYPT()函数的描述。

从4.1版本开始,MySQL采用更强大的身份验证方法,在连接过程中提供比早期版本更好的密码保护。即使TCP/IP数据包被窃听或mysql数据库被捕获,它也是安全的。 (在早期版本中,即使密码以加密形式存储在用户表中,知道加密密码值也可以用于连接到MySQL服务器。)Section 6.1.2.4,“MySQL中的密码哈希”进一步讨论了密码加密。


2
MySQL 4.1+使用双SHA-1哈希(内部哈希输出原始数据,而不是十六进制),旧版本似乎使用非标准哈希。
(有PHP实现的两种哈希在此问题的答案中)
除非你有使用它们的充分理由(与MySQL密码/遗留代码的兼容性似乎是唯一的好理由),否则你应该使用bcrypt/PBKDF2/scrypt来哈希密码。

1
我认为您无法解密存储在MySQL表中的密码,使用存储在mysql user表中的密码也没有用处。您应该在应用程序中创建User时使用设置的密码。如果您丢失了用户密码,则可以使用mysqladmin将其重置。

SET PASSWORD FOR 'user-name-here'@'hostname-name-here' = PASSWORD('new-password-here');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接