mysql使用什么样的哈希?

时间:2013-07-19 04:18:37

标签: mysql hash passwords

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

3 个答案:

答案 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表中存储的密码,并且使用存储在mysqluser表中的密码是没有用的。

您应该使用在应用程序中创建User时设置的密码,如果您丢失了用户密码,则可以使用mysqladmin

重置密码
  

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

答案 2 :(得分:1)

MySQL 4.1+使用双SHA-1哈希(内部哈希输出原始数据,而不是十六进制),旧版本似乎使用非标准哈希。

answers to this question

中有PHP实现

除非你有充分的理由使用它们(兼容MySQL密码/遗留代码似乎是唯一的理由),你应该使用bcrypt / PBKDF2 / scrypt来获取散列密码。