我正在编写类似于phpMyAdmin的自己的代码。但我需要用户能够使用mysql数据库中的用户名和密码登录。我需要知道mysql数据库用来存储每个用户密码的哈希类型。我检查了dev.mysql.com的答案,但找不到任何东西,除了以*开头的较新的41字节哈希。
答案 0 :(得分:3)
不确定,您的问题究竟是针对什么的,但如果您想知道MySQL如何加密存储在用户表中的密码,请阅读here in the manual:
MySQL使用自己的密码加密存储在用户表中的密码 算法。此加密与由此实现的加密相同 PASSWORD() SQL函数但不同于Unix期间使用的函数 登录过程。 Unix密码加密与此相同 由ENCRYPT() SQL函数实现。请参阅的说明 PASSWORD()中的ENCRYPT()和Section 12.13函数,“加密和 压缩函数“。
从版本4.1开始,MySQL采用了更强大的身份验证方法 在连接过程中具有更好的密码保护 在早期版本中。即使嗅探TCP / IP数据包也是安全的 或者捕获mysql数据库。 (在早期版本中,尽管如此 密码以加密形式存储在用户表中,知识渊博 加密的密码值可用于连接MySQL 服务器。)Section 6.1.2.4, “Password Hashing in MySQL”,讨论 密码加密。
答案 1 :(得分:1)
我认为您无法解密MySQL表中存储的密码,并且使用存储在mysql
。user
表中的密码是没有用的。
您应该使用在应用程序中创建User
时设置的密码,如果您丢失了用户密码,则可以使用mysqladmin
SET PASSWORD FOR'user-name-here'@'hostname-name-here'= PASSWORD('new-password-here');
答案 2 :(得分:1)
MySQL 4.1+使用双SHA-1哈希(内部哈希输出原始数据,而不是十六进制),旧版本似乎使用非标准哈希。
中有PHP实现除非你有充分的理由使用它们(兼容MySQL密码/遗留代码似乎是唯一的理由),你应该使用bcrypt / PBKDF2 / scrypt来获取散列密码。